我的计划是要具有如下所述的消息协议:MessageLength
:带有消息总长度的整数MessageID
:具有自动递增标识符的整数MessageType
:带有消息类型的整数(enum
)Payload
:byte[]
以及消息的有效负载(序列化POJO)
目前,我只是在确保以正确和最佳的方式创建ByteBuf
。在这个阶段,我有以下内容:
io.netty.buffer.ByteBuf buf = Unpooled.buffer();
// Test Data Class
TestData test = new TestData("FirstName", "LastName", 40);
// Convert to Bytes is method to return the Byte Array (Serialised POJO)
byte[] payload = convertToBytes(test);
// Write 1 simulating MessageID 1
buf.writeInt(1);
// Write 2 simulating MessageType of 2
buf.writeInt(2);
// Write The Payload data<BR>
buf.writeBytes(payload);
目标是使它们传递到
LengthFieldPrepender
并向上传递。这是创建
ByteBuf
的正确方法吗?或者,还有更好的方法? 最佳答案
如果可能,您应该使用分配器创建ByteBuf,因为这可能会为您提供池化的ByteBuf(取决于配置)。
就像是:
Channel channel = ...
channel.alloc().buffer(expectedSize)
还要注意,我传入了ByteBuf的预期大小,因为这将确保我们以后填充时不需要扩展它。