Netty:在ChannelBuffer中来回交换ByteOrder

时间:2012-11-30 02:54:56

标签: java netty endianness

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

我发现没有(据我所知)处理这种情况的简单方法,尤其是当端点不同时,ChannelBuffers.wrappedBuffer(ChannelBuffer buf)抛出IllegalArgumentException。我正在学习关于Netty和这个协议的内容,所以当我开始时我不知道会遇到这个问题。

其他人如何处理这个问题,特别是在Netty 3.x框架的范围内?我很乐意听到所有的解决方案。

1 个答案:

答案 0 :(得分:4)

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

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

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