我的计划是制定如下所述的消息协议:
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
的正确方法吗?或者有更好的方法吗?
答案 0 :(得分:2)
如果可能,你应该使用allocator来创建ByteBuf,因为这可能会给你一个池化的ByteBuf(取决于配置)。
类似的东西:
Channel channel = ...
channel.alloc().buffer(expectedSize)
另请注意,我传递了ByteBuf的预期大小,因为这样可以确保我们以后不需要在填充它时将其展开。