int[] () { // 48 bits for indexingFileStamp // 16 bits for indexingCharLengthDiff (indexingCharLength = indexingByteLength + indexingCharLengthDiff) // 1 bit for binary flag // 31 bits for indexingByteLength, unsigned (files >2GB are represented with 2^31-1) int representableByteLength = coerceToNonNegativeInt(indexingByteLength); int binary = isBinary ? 0x80_00_00_00 : 0; short indexingCharLengthDiff = coerceToShort(indexingCharLength - representableByteLength); int[] ints = new int[3]; ints[0] = (int)(indexingFileStamp & 0x0_ff_ff_ff_ffL); ints[1] = (int)(((indexingFileStamp >> 32) & 0x0_ff_ff) | (indexingCharLengthDiff << 16)); ints[2] = representableByteLength | binary; return ints; }