@Override public DataBuffer writePosition(int writePosition) { return this.dataBuffer.writePosition(writePosition); }
@Override public int writePosition() { return this.dataBuffer.writePosition(); }
@Override public int writePosition() { return this.dataBuffer.writePosition(); }
@Override public DataBuffer writePosition(int writePosition) { return this.dataBuffer.writePosition(writePosition); }
@Override public DataBuffer writePosition(int writePosition) { return this.delegate.writePosition(writePosition); }
@Override public int writePosition() { return this.delegate.writePosition(); }
int estimatedSize = (int) (inBuffer.remaining() * charsetEncoder.averageBytesPerChar()); ByteBuffer outBuffer = ensureCapacity(estimatedSize) .asByteBuffer(writePosition(), writableByteCount()); while (true) { CoderResult cr = (inBuffer.hasRemaining() ? writePosition(outBuffer.position()); int maximumSize = (int) (inBuffer.remaining() * charsetEncoder.maxBytesPerChar()); ensureCapacity(maximumSize); outBuffer = asByteBuffer(writePosition(), writableByteCount()); writePosition(outBuffer.position());
/** * Find the given delimiter in the given data buffer. * @return the index of the delimiter, or -1 if not found. */ private static int indexOf(DataBuffer dataBuffer, byte[] delimiter) { for (int i = dataBuffer.readPosition(); i < dataBuffer.writePosition(); i++) { int dataBufferPos = i; int delimiterPos = 0; while (delimiterPos < delimiter.length) { if (dataBuffer.getByte(dataBufferPos) != delimiter[delimiterPos]) { break; } else { dataBufferPos++; if (dataBufferPos == dataBuffer.writePosition() && delimiterPos != delimiter.length - 1) { return -1; } } delimiterPos++; } if (delimiterPos == delimiter.length) { return i - dataBuffer.readPosition(); } } return -1; }
@Override public void completed(Integer read, DataBuffer dataBuffer) { if (read != -1) { long pos = this.position.addAndGet(read); dataBuffer.writePosition(read); this.sink.next(dataBuffer); if (!this.disposed.get()) { DataBuffer newDataBuffer = this.dataBufferFactory.allocateBuffer(this.bufferSize); ByteBuffer newByteBuffer = newDataBuffer.asByteBuffer(0, this.bufferSize); this.channel.read(newByteBuffer, pos, newDataBuffer, this); } } else { release(dataBuffer); this.sink.complete(); } }
@Override public void completed(Integer read, DataBuffer dataBuffer) { if (read != -1) { long pos = this.position.addAndGet(read); dataBuffer.writePosition(read); this.sink.next(dataBuffer); if (!this.disposed.get()) { DataBuffer newDataBuffer = this.dataBufferFactory.allocateBuffer(this.bufferSize); ByteBuffer newByteBuffer = newDataBuffer.asByteBuffer(0, this.bufferSize); this.channel.read(newByteBuffer, pos, newDataBuffer, this); } } else { release(dataBuffer); this.sink.complete(); } }
@Override public void accept(SynchronousSink<DataBuffer> sink) { boolean release = true; DataBuffer dataBuffer = this.dataBufferFactory.allocateBuffer(this.bufferSize); try { int read; ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, dataBuffer.capacity()); if ((read = this.channel.read(byteBuffer)) >= 0) { dataBuffer.writePosition(read); release = false; sink.next(dataBuffer); } else { sink.complete(); } } catch (IOException ex) { sink.error(ex); } finally { if (release) { release(dataBuffer); } } } }
@Test public void writePositionGreaterThanCapacity() { DataBuffer buffer = createDataBuffer(1); try { buffer.writePosition(2); fail("IndexOutOfBoundsException expected"); } catch (IndexOutOfBoundsException ignored) { } finally { release(buffer); } }
@Test public void dataBufferContainsByteBufferChanges() { DataBuffer dataBuffer = createDataBuffer(1); ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, 1); byteBuffer.put((byte) 'a'); dataBuffer.writePosition(1); byte b = dataBuffer.read(); assertEquals('a', b); release(dataBuffer); }
@Override protected DataBuffer readFromInputStream() throws IOException { boolean release = true; int capacity = this.bufferSize; DataBuffer dataBuffer = this.factory.allocateBuffer(capacity); try { ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, capacity); ServletRequest request = getNativeRequest(); int read = ((CoyoteInputStream) request.getInputStream()).read(byteBuffer); logBytesRead(read); if (read > 0) { dataBuffer.writePosition(read); release = false; return dataBuffer; } else if (read == -1) { return EOF_BUFFER; } else { return null; } } finally { if (release) { DataBufferUtils.release(dataBuffer); } } } }
@Override public void accept(SynchronousSink<DataBuffer> sink) { boolean release = true; DataBuffer dataBuffer = this.dataBufferFactory.allocateBuffer(this.bufferSize); try { int read; ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, dataBuffer.capacity()); if ((read = this.channel.read(byteBuffer)) >= 0) { dataBuffer.writePosition(read); release = false; sink.next(dataBuffer); } else { sink.complete(); } } catch (IOException ex) { sink.error(ex); } finally { if (release) { release(dataBuffer); } } } }
@Test public void decreaseCapacityLowReadPosition() { DataBuffer buffer = createDataBuffer(2); buffer.writePosition(2); buffer.capacity(1); assertEquals(1, buffer.capacity()); release(buffer); }
@Test public void writePositionSmallerThanReadPosition() { DataBuffer buffer = createDataBuffer(2); try { buffer.write((byte) 'a'); buffer.read(); buffer.writePosition(0); fail("IndexOutOfBoundsException expected"); } catch (IndexOutOfBoundsException ignored) { } finally { release(buffer); } }
@Test public void decreaseCapacityHighReadPosition() { DataBuffer buffer = createDataBuffer(2); buffer.writePosition(2); buffer.readPosition(2); buffer.capacity(1); assertEquals(1, buffer.capacity()); release(buffer); }
@Test public void spr16351() { DataBuffer buffer = createDataBuffer(6); byte[] bytes = {'a', 'b', 'c', 'd', 'e', 'f'}; buffer.write(bytes); DataBuffer slice = buffer.slice(3, 3); buffer.writePosition(3); buffer.write(slice); assertEquals(6, buffer.readableByteCount()); byte[] result = new byte[6]; buffer.read(result); assertArrayEquals(bytes, result); release(buffer); }
assertEquals(0, buffer.writePosition()); assertEquals(0, buffer.readableByteCount()); assertEquals(2, buffer.writableByteCount()); assertEquals(1, buffer.writePosition()); assertEquals(1, buffer.readableByteCount()); assertEquals(1, buffer.writableByteCount()); assertEquals(2, buffer.writePosition()); assertEquals(2, buffer.readableByteCount()); assertEquals(0, buffer.writableByteCount()); assertEquals(2, buffer.writePosition()); assertEquals(1, buffer.readableByteCount()); assertEquals(0, buffer.writableByteCount()); assertEquals(2, buffer.writePosition()); assertEquals(0, buffer.readableByteCount()); assertEquals(0, buffer.writableByteCount());