@Override public Buffer toBuffer(final MemoryManager memoryManager) { final Buffer buffer = memoryManager.allocate( FRAME_HEADER_SIZE); serializeFrameHeader(buffer); buffer.trim(); final CompositeBuffer cb = CompositeBuffer.newBuffer(memoryManager, buffer, compressedHeaders); cb.allowBufferDispose(true); cb.allowInternalBuffersDispose(true); return cb; }
private void init() { if (buffer == null) { buffer = CompositeBuffer.newBuffer(memoryManager); buffer.allowInternalBuffersDispose(true); buffer.allowBufferDispose(true); buffer.append(memoryManager.allocate(DEFAULT_BUFFER_SIZE)); } } }
@Override public void close() { lock.writeLock().lock(); try { if (!isClosed) { isClosed = true; compositeBuffer.dispose(); final CompletionHandler<Integer> localCompletionHandler = completionHandler; if (localCompletionHandler != null) { completionHandler = null; isCompletionHandlerRegistered = false; notifyFailure(localCompletionHandler, new EOFException("Input is closed")); } } } finally { lock.writeLock().unlock(); } }
public boolean append(final Buffer buffer) { if (buffer == null) { return false; } lock.writeLock().lock(); try { if (isClosed) { buffer.dispose(); } else { final int addSize = buffer.remaining(); if (addSize > 0) { compositeBuffer.append(buffer); } notifyUpdate(); } } finally { lock.writeLock().unlock(); } return true; }
dstBuffer.remaining() >= BODY_CHUNK_HEADER_SIZE; } else { if (dstBuffer != null) { dstBuffer.trim(); headerBuffer = memoryManager.allocate(BODY_CHUNK_HEADER_SIZE); headerBuffer.allowBufferDispose(true); headerBuffer.trim(); Buffer resultBuffer = Buffers.appendBuffers(memoryManager, headerBuffer, httpContentBuffer); final Buffer terminatingBuffer = memoryManager.allocate(1); terminatingBuffer.allowBufferDispose(true); resultBuffer = Buffers.appendBuffers(memoryManager, resultBuffer, terminatingBuffer); resultBuffer = Buffers.appendBuffers(memoryManager, dstBuffer, resultBuffer); ((CompositeBuffer) resultBuffer).allowInternalBuffersDispose(true);
buffer.limit() - bufferPosition, length); if (buffer.isComposite()) { final int findPos = ((CompositeBuffer) buffer).bulk(operation, bufferPosition, bufferPosition + bytesToProcess); for (int i = bufferPosition; i < bufferPosition + bytesToProcess; i++) { setter.position = i; if (operation.processByte(buffer.get(i), setter)) { return offset + (i - bufferPosition);
@Test public void testBuffers() { Buffer sampleBuffer = Buffers.wrap(mm, new byte[]{-1, 0, 1, 1, 2, 3, 4}); Buffer b1 = mm.allocate(3); Buffer b2 = mm.allocate(4); CompositeBuffer compositeBuffer = createCompositeBuffer(b1, b2); compositeBuffer.put(sampleBuffer); compositeBuffer.flip(); sampleBuffer.flip(); while (sampleBuffer.hasRemaining()) { assertEquals(sampleBuffer.get(), compositeBuffer.get()); } }
@Override public Buffer toBuffer(final MemoryManager memoryManager) { final Buffer buffer = memoryManager.allocate(FRAME_HEADER_SIZE + 8); serializeFrameHeader(buffer); buffer.putInt(lastStreamId & 0x7fffffff); buffer.putInt(errorCode.getCode()); buffer.trim(); if (additionalDebugData == null || !additionalDebugData.hasRemaining()) { return buffer; } final CompositeBuffer cb = CompositeBuffer.newBuffer( memoryManager, buffer, additionalDebugData); cb.allowBufferDispose(true); cb.allowInternalBuffersDispose(true); return cb; }
@Test public void testEmptyBufferPrepend() { Buffer buffer1 = Buffers.wrap(mm, "1234"); buffer1.position(3); Buffer buffer2 = mm.allocate(0); CompositeBuffer compositeBuffer = createCompositeBuffer(buffer1); assertEquals('4', (char) compositeBuffer.get(0)); Buffer resultBuffer = Buffers.appendBuffers(mm, buffer2, compositeBuffer); assertEquals(resultBuffer.toStringContent(), "4"); }
@Test public void testGetByteBuffer() { final byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; final List<Buffer> bufferList = new ArrayList<Buffer>(); for (byte b : bytes) { final Buffer buffer = mm.allocate(1); buffer.put(0, b); bufferList.add(buffer); } final Buffer[] buffers = bufferList.toArray(new Buffer[bufferList.size()]); final CompositeBuffer composite = CompositeBuffer.newBuffer(mm, buffers); final ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length * 2); final int position = byteBuffer.remaining() / 4; for (int i = 0; i < bytes.length; i++) { Buffers.setPositionLimit(composite, 0, i); Buffers.setPositionLimit(byteBuffer, position, position + i); composite.get(byteBuffer); Buffers.setPositionLimit(composite, 0, i); Buffers.setPositionLimit(byteBuffer, position, position + i); assertTrue(composite.equals(Buffers.wrap(mm, byteBuffer))); } }
public static int writeCompositeBuffer(final TCPNIOConnection connection, final CompositeBuffer buffer) throws IOException { final int bufferSize = calcWriteBufferSize(connection, buffer.remaining()); final int oldPos = buffer.position(); final int oldLim = buffer.limit(); buffer.limit(oldPos + bufferSize); final BufferArray bufferArray = buffer.toBufferArray(); final DirectByteBufferRecord ioRecord = DirectByteBufferRecord.get(); Buffers.setPositionLimit(buffer, oldPos + written, oldLim); return written;
@Override public void run() { // Initialize memory manager mm.allocate(33); final int initialSize = mm.getReadyThreadBufferSize(); CompositeBuffer compositeBuffer = CompositeBuffer.newBuffer(mm); for (int i = 0; i < 3; i++) { Buffer b = mm.allocate(100); b.allowBufferDispose(true); compositeBuffer.append(b); } compositeBuffer.toByteBuffer(0, 100); compositeBuffer.position(100); compositeBuffer.dispose(); assertEquals(initialSize, mm.getReadyThreadBufferSize()); } };
@Test public void testToStringContent2() { final Charset utf16 = Charset.forName("UTF-16"); final String msg = "\u043F\u0440\u0438\u0432\u0435\u0442"; final Buffer msgBuffer = Buffers.wrap(mm, msg, utf16); final Buffer b1 = msgBuffer.duplicate(); final Buffer b2 = b1.split(3); final CompositeBuffer composite = CompositeBuffer.newBuffer( mm, b1, b2); assertTrue(composite.equals(msgBuffer)); assertEquals(msg, composite.toStringContent(utf16)); }
@Test public void testSplitWithMark() { final CompositeBuffer composite = CompositeBuffer.newBuffer( mm, Buffers.wrap(mm, "hello"), Buffers.wrap(mm, " world")); composite.position(4); composite.mark(); Buffer otherHalf = composite.split(6); assertMarkExceptionThrown(otherHalf); composite.reset(); otherHalf = composite.split(2); assertMarkExceptionThrown(composite); assertMarkExceptionThrown(otherHalf); }
@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)); }
public void testToStringContent() { final CompositeBuffer composite = CompositeBuffer.newBuffer( mm, Buffers.wrap(mm, "hello"), Buffers.wrap(mm, " world")); assertEquals("hello world", composite.toStringContent()); }