我的计划是要具有如下所述的消息协议:


MessageLength:带有消息总长度的整数
MessageID:具有自动递增标识符的整数
MessageType:带有消息类型的整数(enum
Payloadbyte[]以及消息的有效负载(序列化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的预期大小,因为这将确保我们以后填充时不需要扩展它。

09-25 20:41