InputBuffer implements Closeable { public InputBuffer(BufferType type, int inputSize) throws IOException { final int capacity = inputSize; this.type = type; if (capacity > 0) { switch (type) { case DIRECT_BUFFER: this.byteBuffer = bufferPool.getBuffer(capacity); this.byteBuffer.order(ByteOrder.BIG_ENDIAN); break; case HEAP_BUFFER: this.byteBuffer = ByteBuffer.allocate(capacity); this.byteBuffer.order(ByteOrder.BIG_ENDIAN); break; } byteBuffer.position(0); byteBuffer.limit(0); } } InputBuffer(BufferType type, int inputSize);  InputBuffer(byte[] bytes); BufferType getType(); ByteBuffer getByteBuffer(); int length(); void rewind(int startOffset, int length); int remaining(); int position(); int position(int pos); int capacity(); byte[] array(); @Override void close();  }
@Test public void testInputBuffer() throws IOException { final int size = 100; final InputBuffer input1 = new InputBuffer(BufferType.DIRECT_BUFFER, size); assertThat(input1.getType()).isEqualTo(BufferType.DIRECT_BUFFER); assertThat(input1.position()).isZero(); assertThat(input1.length()).isZero(); assertThat(input1.remaining()).isZero(); assertThat(input1.capacity()).isEqualTo(size); final InputBuffer input2 = new InputBuffer(BufferType.HEAP_BUFFER, size); assertThat(input2.getType()).isEqualTo(BufferType.HEAP_BUFFER); assertThat(input2.position()).isZero(); assertThat(input2.length()).isZero(); assertThat(input2.remaining()).isZero(); assertThat(input2.capacity()).isEqualTo(size); final InputBuffer input3 = new InputBuffer(new byte[size]); assertThat(input3.getType()).isEqualTo(BufferType.HEAP_BUFFER); assertThat(input3.position()).isZero(); assertThat(input3.length()).isZero(); assertThat(input3.remaining()).isZero(); assertThat(input3.capacity()).isEqualTo(size); }