【问题标题】:Netty: Swapping ByteOrder back and forth in a ChannelBufferNetty:在 ChannelBuffer 中来回交换 ByteOrder
【发布时间】:2012-12-03 13:48:34
【问题描述】:

我目前正在使用 Netty 3.5.10.Final 为使用具有混合字节顺序的二进制协议的服务器实现客户端。也就是说,协议中有很多情况我必须以大端顺序读取/写入一组字节,然后以小端顺序读取另一组字节,然后再次切换回大端。

我发现(据我所知)没有一种简单的方法来处理这种情况,特别是当字节顺序不同时 ChannelBuffers.wrappedBuffer(ChannelBuffer buf) 抛出 IllegalArgumentException 。我正在学习 Netty 和这个协议,所以当我开始的时候我不知道我会遇到这个问题。

其他人是如何处理这个问题的,尤其是在 Netty 3.x 框架的范围内?不过,我很想听听所有解决方案。

【问题讨论】:

    标签: java netty endianness


    【解决方案1】:

    如果您正在实施的协议具有混合字节顺序的字段,那么您可以选择一个字节顺序作为默认值(例如大端)并交换特定字段的字节顺序:

    ChannelBuffer buf = ...;
    int littleEndianField = ChannelBuffers.swapInt(buf.readInt());
    

    根据字段的宽度,您可以使用以下之一:swapShort()swapMedium()swapInt()swapLong()

    【讨论】:

    • 不错,这是一个非常好的方法。我的情况可能有点乏味,但我想我会尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多