@Override public int getIntArray(int row, int[] intArray) { int startOffset = computeStartOffset(row); int length = computeLength(startOffset); for (int i = 0; i < length; i++) { intArray[i] = rawDataReader.getInt(startOffset + i, 0); } return length; }
public FixedBitSkipListSCMVReader( File file, int numDocs, int totalNumValues, int columnSizeInBits, boolean signed, boolean isMmap) throws Exception { this.numDocs = numDocs; this.totalNumValues = totalNumValues; float averageValuesPerDoc = totalNumValues / numDocs; this.docsPerChunk = (int) (Math.ceil(PREFERRED_NUM_VALUES_PER_CHUNK / averageValuesPerDoc)); this.numChunks = (numDocs + docsPerChunk - 1) / docsPerChunk; chunkOffsetHeaderSize = numChunks * SIZE_OF_INT * NUM_COLS_IN_HEADER; bitsetSize = (totalNumValues + 7) / 8; rawDataSize = Ints.checkedCast(((long) totalNumValues * columnSizeInBits + 7) / 8); totalSize = chunkOffsetHeaderSize + bitsetSize + rawDataSize; raf = new RandomAccessFile(file, "rw"); this.isMmap = isMmap; if (isMmap) { chunkOffsetsBuffer = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, chunkOffsetHeaderSize).load(); bitsetBuffer = raf.getChannel() .map(FileChannel.MapMode.READ_WRITE, chunkOffsetHeaderSize, bitsetSize) .load(); rawDataBuffer = raf.getChannel() .map(FileChannel.MapMode.READ_WRITE, chunkOffsetHeaderSize + bitsetSize, rawDataSize) .load(); chunkOffsetsReader = new FixedByteWidthRowColDataFileReader( chunkOffsetsBuffer, numDocs, NUM_COLS_IN_HEADER, new int[] {SIZE_OF_INT}); customBitSet = CustomBitSet.withByteBuffer(bitsetSize, bitsetBuffer); rawDataReader = FixedBitWidthRowColDataFileReader.forByteBuffer( rawDataBuffer, totalNumValues, 1, new int[] {columnSizeInBits}, new boolean[] {signed}); } else { chunkOffsetsBuffer = ByteBuffer.allocateDirect(chunkOffsetHeaderSize); raf.getChannel().read(chunkOffsetsBuffer); chunkOffsetsReader = new FixedByteWidthRowColDataFileReader( chunkOffsetsBuffer, numDocs, NUM_COLS_IN_HEADER, new int[] {SIZE_OF_INT}); bitsetBuffer = ByteBuffer.allocateDirect(bitsetSize); raf.getChannel().read(bitsetBuffer); customBitSet = CustomBitSet.withByteBuffer(bitsetSize, bitsetBuffer); rawDataBuffer = ByteBuffer.allocateDirect(rawDataSize); raf.getChannel().read(rawDataBuffer); rawDataReader = FixedBitWidthRowColDataFileReader.forByteBuffer( rawDataBuffer, totalNumValues, 1, new int[] {columnSizeInBits}, new boolean[] {signed}); raf.close(); } }