@Override public int available() { return buffer.limit() - pos; }
@Override public boolean equals(Object other) { if (!(other instanceof Buffer)) { return false; } Buffer o = (Buffer) other; // TODO optimize if (limit() != o.limit()) { return false; } int i = offset; int io = o.offset; while (i < filled) { if (array[i] != o.array[io]) { return false; } i++; io++; } return true; }
private boolean doFlush() { if (pos > 0) { buffer.limit(pos); out.add(buffer); buffer = Buffer.EMPTY; pos = 0; return true; } return false; }
public static Buffer wrap(byte[] src, int offset, int size) { return new Buffer(src, offset, size).limit(size); }
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(); } }
@Override public int read(byte[] b, int off, int len) { while (pos >= buffer.limit()) { if (!nextBuffer()) { return -1; } } int remaining = buffer.limit() - pos; boolean allConsumed; if (remaining <= len) { allConsumed = true; len = remaining; } else { allConsumed = false; } if (b != null) { // b == null if skip buffer.getBytes(pos, b, off, len); } if (allConsumed) { releaseBuffer(); } else { pos += len; } return len; }
@Override public void run(TaskSource taskSource, Schema schema, FileInput input, PageOutput output) { PluginTask task = taskSource.loadTask(PluginTask.class); Buffer buffer = readSample(input, task.getSampleBufferBytes()); if (!taskSource.get(boolean.class, "force", false)) { if (buffer.limit() < minSampleBufferBytes) { throw new NotEnoughSampleError(buffer.limit()); } } throw new SampledNoticeError(buffer); }
public static Buffer readSample(FileInput fileInput, Buffer sample, int offset, int sampleBufferBytes) { if (!fileInput.nextFile()) { // no input files return sample; } try { for (Buffer buffer : each(fileInput)) { int size = Math.min(buffer.limit(), sample.capacity() - offset); sample.setBytes(offset, buffer, 0, size); offset += size; buffer.release(); if (offset >= sampleBufferBytes) { break; } } } finally { sample.limit(offset); } return sample; } }
private static Buffer readSample(FileInput fileInput, int sampleSize) { Buffer sample = Buffer.allocate(sampleSize); try { SamplingParserPlugin.readSample(fileInput, sample, 0, sampleSize); } catch (RuntimeException ex) { // ignores exceptions because FileDecoderPlugin can throw exceptions // such as "Unexpected end of ZLIB input stream" if decoder plugin // is wrongly guessed. } if (sample.limit() > 0) { return sample; } throw new NoSampleException("No input buffer to guess"); }
private String bufferToString(Buffer buffer, String charset) throws UnsupportedEncodingException { return new String(buffer.array(), buffer.offset(), buffer.limit(), charset); } }
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; } } }
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 }
private void doFlush() { if (buffer != null && count > 0) { // write page header bufferSlice.setInt(0, count); buffer.limit(position); // flush page Page page = Page.wrap(buffer) .setStringReferences(stringReferences) .setValueReferences(valueReferences); buffer = null; bufferSlice = null; output.add(page); } }
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; }