用MINA开发通信程序,很重要的一点是自定义编码,因为他可以完成不同平台的数据交换,如手机软件终端,linux服务端,其中手机终端可能是android开发,iphone,sybian,所以,经常需要直接二进制处理。
在服务器端中,最重要的就是编解码!在“编码”和“解码”中的一个重要问题是如何在字节流中判断消息的边界。通常来说,有三种办法解决这个问题:
- 使用固定长度的消息。这种方式实现起来比较简单,只需要每次读取特定数量的字节即可。
定长协议----如:心跳包[10Bytes] |
- 使用固定长度的消息头来指明消息主体的长度。比如每个消息开始的 4 个字节的值表示了后面紧跟的消息主体的长度。只需要首先读取该长度,再读取指定数量的字节即可。
包头(表示本信息的总长度,一般情况下为[1-4字节]) | 包内容[包头所指定的长度] |
- 使用分隔符。消息之间通过特定模式的分隔符来分隔。每次只要遇到该模式的字节,就表示到了一个消息的末尾。
数据+";"+数据+“;”