【问题标题】:How to split serialized byte stream (e.g avro, protobuf) in network?如何在网络中拆分序列化字节流(例如 avro、protobuf)?
【发布时间】:2021-09-27 00:30:19
【问题描述】:

最近想用netty写一个应用程序。我想发送的消息格式是使用Avro或Protobuf序列化的对象流。 对我来说存在一个问题,即当一侧从另一侧接收字节流时,我如何拆分字节流,或者我怎么知道这样的流是否终止,并为下一个序列化对象做好准备? 我得到了一些在不同对象字节流之间使用特殊字符的提示,但是 avro 或 protobuf 不会在序列化对象时生成此类字符?

【问题讨论】:

    标签: networking serialization netty avro


    【解决方案1】:

    我认为您最有可能想用它被序列化的字节数“前缀”每个序列化对象。这将允许您确保您只读取每个对象的正确字节数,因此在反序列化时做正确的事情。

    Netty 本身包含例如LengthFieldBasedFrameDecoder,它将允许您“切片”出对象的字节。还有LengthFieldPrepender,它允许您在进行编码时为它们中的每一个添加前缀。

    【讨论】:

    • 谢谢!但是另一个问题让我很困惑,如果有人不发送这种格式的请求,或者长度不对,那么应用程序可能是乱序的,是吗?
    • 是的,这是正确的,但除了很可能关闭连接之外,您无能为力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多