字节序,分为高位在前和低位在前,说白了就是先从低操作还是从高位操作
java和网络的字节序是一致的,都是高位在前,这意味着java端序列化和反序列化时不用关心字节序的问题,
那问题是,那讨论字节序有什么意义那,假设c++和java通信,这时候c++端就需要考虑字节序,需要在序列化和反序列化时翻一下
这是mina IOBuffer提供的设置字节序的方法
IoBuffer order(ByteOrder bo):
这个方法设置是Big Endian 还是Little Endian,JAVA 中默认是Big Endian,C++和其他语言一般是Little Endian。
这是mina处理粘包和断包时的一段代码
buf.flip();
IoBuffer newBuf = IoBuffer.allocate(
buf.remaining() + in.remaining()).setAutoExpand(true);
newBuf.order(buf.order());
newBuf.put(buf);
newBuf.put(in);
newBuf.flip();
buf = newBuf;
// Update the session attribute.
session.setAttribute(BUFFER, buf);
注意这里
我们new了一个IOBuffer,默认是不支持扩展的,也是不指定字节序的,所以我们都是明示的设定
将newBuff的字节序设定为与session中的一 致,覆盖session中的值
详细了解字节序可参考http://www.blogjava.net/tinysun/archive/2009/12/31/307952.html