@Override protected ByteArrayOutput create(int bufferSize) { return new ByteArrayOutput(bufferSize, MAX_BUFFER_SIZE, new BufferAwareByteArrayOutputStream(bufferSize)); }
@Override protected boolean recycle(ByteArrayOutput output) { if (output.getByteArrayOutputStream().getBufferSize() < MAX_POOLED_BUFFER_SIZE) { output.getByteArrayOutputStream().reset(); output.clear(); return true; } return false; // discard } }
@Override public byte[] serializeMessage(BasicRuntime basicRuntime, Message message) throws Exception { return outputPool.run(out -> { return kryoPool.run(kryo -> { out.writeByte(message.getMessageType()); out.writeInt(message.getMessageId()); writeNodeAddress(out, message.getReferenceAddress()); out.writeInt(message.getInterfaceId()); out.writeInt(message.getMethodId()); writeObjectId(kryo, out, message); writeHeaders(kryo, out, message.getHeaders()); writeNodeAddress(out, message.getFromNode()); writePayload(kryo, out, message); out.flush(); return out.getByteArrayOutputStream().toByteArray(); }); }, DEFAULT_BUFFER_SIZE); }