Netty ByteBuf首次实施

时间:2017-05-01 11:22:35

标签: java netty

我的计划是制定如下所述的消息协议:

  • 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的正确方法吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果可能,你应该使用allocator来创建ByteBuf,因为这可能会给你一个池化的ByteBuf(取决于配置)。

类似的东西:

Channel channel = ...
channel.alloc().buffer(expectedSize)

另请注意,我传递了ByteBuf的预期大小,因为这样可以确保我们以后不需要在填充它时将其展开。