3

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

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

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

4

1 回答 1

4

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

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

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

于 2012-12-03T05:48:34.837 回答