【MINA】字节序知识

字节序,分为高位在前和低位在前,说白了就是先从低操作还是从高位操作

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

原文地址:https://www.cnblogs.com/dagangzi/p/4714905.html