| | |
| | | } |
| | | |
| | | /** Buffer used by {@link InMemorySortedChunk} to store and sort data. */ |
| | | private interface Buffer extends Closeable |
| | | interface Buffer extends Closeable |
| | | { |
| | | void writeInt(int position, int value); |
| | | |
| | |
| | | } |
| | | |
| | | /** Off-heap buffer using Unsafe memory access. */ |
| | | private final class OffHeapBuffer implements Buffer |
| | | static final class OffHeapBuffer implements Buffer |
| | | { |
| | | private final long address; |
| | | private final int size; |
| | |
| | | @Override |
| | | public int read() throws IOException |
| | | { |
| | | return unsafe.getByte(address + position++); |
| | | return unsafe.getByte(address + position++) & 0xFF; |
| | | } |
| | | }; |
| | | private final OutputStream asOutputStream = new OutputStream() |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void close() throws IOException |
| | | public void close() |
| | | { |
| | | if (!closed) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | /** Off-heap buffer using Unsafe memory access. */ |
| | | private final class HeapBuffer implements Buffer |
| | | /** Heap buffer using ByteBuffer. */ |
| | | static final class HeapBuffer implements Buffer |
| | | { |
| | | private final ByteBuffer buffer; |
| | | private final OutputStream asOutputStream = new OutputStream() |