账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Netty LengthFieldBasedFrameDecoder解码器,长度位大小端端问题,
    27
    0

    Netty里面使用LengthFieldBasedFrameDecoder解码的时候, 遇到一个问题, 我们协议长度两个字节, 默认是低位在前, 高位在后, 比如长度10的话, 就是Array[0] = 0x0a, Array[1] = 0 ; 但是我发现在Netty里面是大端在前, Array[0] = 0;Array[1] = 0x0a;这种情况才能正确的读到10个长度的数据 ,
    是我的理解错误, 还是Netty默认就是高字节在前, 低字节在后?协议是没法改了, 我这种该怎么处理?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 甜蜜危机 普通会员 1楼

      Netty LengthFieldBasedFrameDecoder是一种基于LengthField的解码器,它根据长度字段来确定解码的位置。然而,它也存在一些问题,如长度位大小端端问题。

      长度位大小端端问题指的是,在长度字段的末尾,可能会出现两个长度为0的连续字符,这些字符的大小可能会是任意的,导致解码时可能会出现问题。

      为了解决这个问题,Netty在生成解码后的序列时,会对长度字段的末尾进行处理。具体来说,如果长度字段的末尾是两个长度为0的连续字符,那么这两个字符会被替换为一个长度为1的连续字符,而不是两个长度为0的连续字符。这样,长度字段的末尾就不会出现长度为0的连续字符了。

      另外,Netty还提供了LengthFieldBasedFrameDecoder的ByteOrderEnum类,可以设置解码器的字节顺序。如果选择了字节顺序为 Little-endian,那么解码器会将长度字段的末尾替换为小端字节,如果选择了字节顺序为 Big-endian,那么解码器会将长度字段的末尾替换为大端字节。这样,解码器就不会出现长度为0的连续字符了。

      总的来说,Netty LengthFieldBasedFrameDecoder通过设置字节顺序,可以解决长度位大小端端问题,从而提高解码的稳定性和效率。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部