/** Add a buffer to the output without copying, if possible. */ public void write(ByteBuffer buffer) { if (buffer.remaining() < bufferSize) { 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); } } }
public void append(ByteBufferOutputStream out, Object value, Equality equality) { ComponentSerializer<?> serializer = components.get(position); // First, serialize the ByteBuffer for this component ByteBuffer cb; try { cb = serializer.serializeValue(value); } catch (Exception e) { throw new RuntimeException(e); } if (cb == null) { cb = EMPTY_BYTE_BUFFER; } // Write the data: <length><data><0> out.writeShort((short) cb.remaining()); out.write(cb.slice()); out.write(equality.toByte()); } };