如何在网络中拆分序列化字节流(例如 avro、protobuf)?
How to split serialized byte stream (e.g avro, protobuf) in network?
最近,我想使用 netty.The 格式的消息编写一个应用程序,我想发送的消息是使用 Avro 或 Protobuf 的序列化对象流。
我有一个问题,那就是当一侧从另一侧接收字节流时,我如何拆分字节流,或者我如何知道这样的流是否终止,并为下一个序列化对象做好准备?
我得到一些在不同对象字节流之间使用特殊字符的提示,但 avro 或 protobuf 不会在序列化对象时生成此类字符吗?
我认为您很可能想在每个序列化对象的“前缀”上加上序列化的字节数。这将允许您确保您只读取每个对象的正确字节数,因此在反序列化时做正确的事情。
Netty 本身包含例如 LengthFieldBasedFrameDecoder
,它将允许您“切出”对象的字节。 LengthFieldPrepender
允许您在编码时为每个前缀添加前缀。
最近,我想使用 netty.The 格式的消息编写一个应用程序,我想发送的消息是使用 Avro 或 Protobuf 的序列化对象流。 我有一个问题,那就是当一侧从另一侧接收字节流时,我如何拆分字节流,或者我如何知道这样的流是否终止,并为下一个序列化对象做好准备? 我得到一些在不同对象字节流之间使用特殊字符的提示,但 avro 或 protobuf 不会在序列化对象时生成此类字符吗?
我认为您很可能想在每个序列化对象的“前缀”上加上序列化的字节数。这将允许您确保您只读取每个对象的正确字节数,因此在反序列化时做正确的事情。
Netty 本身包含例如 LengthFieldBasedFrameDecoder
,它将允许您“切出”对象的字节。 LengthFieldPrepender
允许您在编码时为每个前缀添加前缀。