@Override public void write(byte[] b) { write(b, 0, b.length); }
/** Add a buffer to the output without copying, if possible. */ public void write(ByteBuffer buffer) { if (buffer.remaining() < 8196) { write(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); } else { // append w/o copying bytes ByteBuffer dup = buffer.duplicate(); dup.position(buffer.limit()); // ready for flip buffers.add(dup); } } }
@Override public void write(byte[] b, int off, int len) { ByteBuffer lastBuffer = buffers.get(buffers.size() - 1); if(lastBuffer.remaining() >= len) { lastBuffer.put(b, off, len); } else { int writtenToLast = lastBuffer.remaining(); if(lastBuffer.remaining() != 0) { lastBuffer.put(b, off, writtenToLast); } //this will create a buffer with //a capacity of at least len - writtenToLast getBufferWithCapacity(len - writtenToLast); //this will not need to resize write(b, off + writtenToLast, len - writtenToLast); } }
@Test public void testWriteLargeByteBuffer() throws IOException { ByteBufferOutputStream sink = new ByteBufferOutputStream(); byte[] written = new byte[32 * 1000]; new Random().nextBytes(written); sink.write(ByteBuffer.wrap(written)); assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written)); }
private void testWriteLByteArray(int bufferSize) throws IOException { ByteBufferOutputStream sink = new ByteBufferOutputStream(); byte[] written = new byte[bufferSize]; new Random().nextBytes(written); sink.write(written); assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written)); }
@Test public void testWriteByteArraySeveralSteps() throws IOException { ByteBufferOutputStream sink = new ByteBufferOutputStream(); byte[] written = new byte[32 * ByteBufferOutputStream.INITIAL_BUFFER_SIZE]; new Random().nextBytes(written); for(int i = 0; i < 32; i++) { sink.write(written, i * ByteBufferOutputStream.INITIAL_BUFFER_SIZE, ByteBufferOutputStream.INITIAL_BUFFER_SIZE); } assertEquals(0, ByteBufferUtil.compare(sink.getByteBuffer(), written)); }
@Override public void write(byte[] b) { write(b, 0, b.length); }
@Override public void write(byte[] b) { write(b, 0, b.length); }
/** Add a buffer to the output without copying, if possible. */ public void write(ByteBuffer buffer) { if (buffer.remaining() < 8196) { write(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); } else { // append w/o copying bytes ByteBuffer dup = buffer.duplicate(); dup.position(buffer.limit()); // ready for flip buffers.add(dup); } } }
/** Add a buffer to the output without copying, if possible. */ public void write(ByteBuffer buffer) { if (buffer.remaining() < 8196) { write(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); } else { // append w/o copying bytes ByteBuffer dup = buffer.duplicate(); dup.position(buffer.limit()); // ready for flip buffers.add(dup); } } }
@Override public void write(byte[] b, int off, int len) { ByteBuffer lastBuffer = buffers.get(buffers.size() - 1); if(lastBuffer.remaining() >= len) { lastBuffer.put(b, off, len); } else { int writtenToLast = lastBuffer.remaining(); if(lastBuffer.remaining() != 0) { lastBuffer.put(b, off, writtenToLast); } //this will create a buffer with //a capacity of at least len - writtenToLast getBufferWithCapacity(len - writtenToLast); //this will not need to resize write(b, off + writtenToLast, len - writtenToLast); } }
@Override public void write(byte[] b, int off, int len) { ByteBuffer lastBuffer = buffers.get(buffers.size() - 1); if(lastBuffer.remaining() >= len) { lastBuffer.put(b, off, len); } else { int writtenToLast = lastBuffer.remaining(); if(lastBuffer.remaining() != 0) { lastBuffer.put(b, off, writtenToLast); } //this will create a buffer with //a capacity of at least len - writtenToLast getBufferWithCapacity(len - writtenToLast); //this will not need to resize write(b, off + writtenToLast, len - writtenToLast); } }