public void add(Buffer buffer) { if (current == null) { throw new IllegalStateException("nextFile() must be called before poll()"); } try { current.write(buffer.array(), buffer.offset(), buffer.limit()); } catch (IOException ex) { throw new RuntimeException(ex); } finally { buffer.release(); } }
public void add(Buffer buffer) { try { output.write(buffer.array(), buffer.offset(), buffer.limit()); } catch (IOException ex) { throw new RuntimeException(ex); } finally { buffer.release(); } }
public void getBytes(int index, Buffer dest, int destIndex, int length) { getBytes(index, dest.array(), dest.offset() + destIndex, length); }
public void setBytes(int index, Buffer source, int sourceIndex, int length) { setBytes(index, source.array(), source.offset() + sourceIndex, length); }
private void newBuffer() { this.buffer = allocator.allocate(PageFormat.PAGE_HEADER_SIZE + fixedRecordSize); this.bufferSlice = Slices.wrappedBuffer(buffer.array(), buffer.offset(), buffer.capacity()); this.count = 0; this.position = PageFormat.PAGE_HEADER_SIZE; this.stringReferences = new ArrayList<>(); this.valueReferences = new ArrayList<>(); this.referenceSize = 0; }
@Override public void write(int b) { buffer.array()[buffer.offset() + pos] = (byte) b; pos++; if (pos >= buffer.capacity()) { flush(); } }
private String bufferToString(Buffer buffer, String charset) throws UnsupportedEncodingException { return new String(buffer.array(), buffer.offset(), buffer.limit(), charset); } }
public static int getRecordCount(Page page) { Buffer pageBuffer = page.buffer(); Slice pageSlice = Slices.wrappedBuffer(pageBuffer.array(), pageBuffer.offset(), pageBuffer.limit()); return pageSlice.getInt(0); // see page format }
public Buffer poll() { if (current == null || current.getInputStream() == null) { throw new IllegalStateException("nextFile() must be called before poll()"); } Buffer buffer = allocator.allocate(); try { int n = current.getInputStream().read(buffer.array(), buffer.offset(), buffer.capacity()); if (n < 0) { return null; } buffer.limit(n); Buffer b = buffer; buffer = null; return b; } catch (IOException ex) { throw new RuntimeException(ex); } finally { if (buffer != null) { buffer.release(); buffer = null; } } }
@Override public int read() { while (pos >= buffer.limit()) { if (!nextBuffer()) { return -1; } } byte b = buffer.array()[buffer.offset() + pos]; pos++; if (pos >= buffer.limit()) { releaseBuffer(); } return b & 0xff; }
public void setPage(Page page) { this.page.buffer().release(); this.page = SENTINEL; Buffer pageBuffer = page.buffer(); Slice pageSlice = Slices.wrappedBuffer(pageBuffer.array(), pageBuffer.offset(), pageBuffer.limit()); pageRecordCount = pageSlice.getInt(0); // see page format readCount = 0; position = PageFormat.PAGE_HEADER_SIZE; this.page = page; this.pageSlice = pageSlice; }