### Question:
CompositeBuffer implements Buffer { public abstract int bulk(BulkOperation operation);  static CompositeBuffer newBuffer(); static CompositeBuffer newBuffer(final MemoryManager memoryManager); static CompositeBuffer newBuffer(final MemoryManager memoryManager, final Buffer... buffers); static CompositeBuffer newBuffer(final MemoryManager memoryManager, final Buffer[] buffers, final boolean isReadOnly); DisposeOrder disposeOrder(); CompositeBuffer disposeOrder(final DisposeOrder disposeOrder); abstract CompositeBuffer append(Buffer buffer); @Override abstract CompositeBuffer prepend(Buffer buffer); @Override abstract Object[] underlying(); abstract void removeAll(); abstract void allowInternalBuffersDispose(boolean allow); abstract boolean allowInternalBuffersDispose(); abstract int bulk(BulkOperation operation); abstract int bulk(BulkOperation operation, int position, int limit); abstract boolean replace(Buffer oldBuffer, Buffer newBuffer);  }### Answer:
@Test public void testBulk() { final Charset ascii = Charset.forName("ASCII"); final CompositeBuffer composite = CompositeBuffer.newBuffer(mm, Buffers.wrap(mm, "hello", ascii), Buffers.wrap(mm, " world", ascii)); composite.bulk(new CompositeBuffer.BulkOperation() { @Override public boolean processByte(byte value, final Setter setter) { setter.set((byte) Character.toUpperCase(value)); return false; } }); assertEquals("HELLO WORLD", composite.toStringContent(ascii)); }