组件地址
https://gitee.com/mier520/my-resource/tree/%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%E5%8C%85
说明
组件比较简单,但也很实用,下载使用即可。
介绍
一种简单的传输数据包的实现方法;
支持自定义数据包格式的定义;
已实现适配自定义包格式的数据的封包和拆包处理;
已实现简单的数据加解密处理;
已实现简单的数据解压缩处理;
可扩展数据加解密、数据解压缩处理;
使用预览
public class Test{
public static void main(String[] args) {
String str = "hell word ,你好世界!";
MessageProtocol protocol = MessageProtocolBuilder.create().simple();
MessageCoder coder = new MessageCoder(protocol);
byte[] bytes = coder.encode(str);
System.out.println(Hex.byte2HexStr(bytes ," "));
System.out.println(new String(coder.decode(bytes).getContent()));
}
}
核心类介绍
MessageProtocol
本组件核心类,所有工作必然围绕该类展开;
数据包格式定义类,通过它实现个性化的数据包格式,以及展开后续的封包、拆包工作;
MessageProtocol提供了一个固定格式内容可变的数据包格式,使用时只需在格式内规定可变内容即可;
固定格式
消息头 + 正文长度 + [正文加密方法] + [正文压缩方法] + [自定义内容] + 正文 + [消息结尾]
提示:MessageProtocol是定义数据包格式,而不是向这个格式内填充内容;
消息头
表示定义的数据包的开始标识符,可以是$a,$b ,$c等等,字符不限长度不限,具体由自己定义;
注意: 消息头不要太长影响到整个包的大小,也不能太平常化容易导致拆包不准确或错误;
正文长度
规定正文长度在数据包中占据的字节个数
这里传入的是一个整数,表示的是正文长度在数据包中所占据的字节个数,即将一个整数装换为字节数组的长度,长度越大能表示的整数值越大,则单个数据包传输的正文内容越大;
注意: 应当根据项目情况设定大小,但不能太大,单个数据包过大,容易丢包,解析出错,还会影响系统性能;
提示: 字节个数为1能传输256个字节的正文 ,字节个数为2等于64KB正文 ,字节个数为3等于16MB正文 ,字节数为4等于4GB正文;
建议: 字节个数为2更通用
其它
[] 为可选内容
[正文加密方法]、[正文压缩方法]、[自定义内容]都是定义所占据的字节个数,同正文长度;
正文 由封包时存入
[消息结尾] 同消息头
MessageCoder
数据包处理类,详情查看该类即可
扩展接口
MessageCipher
数据包正文加解密处理扩展接口,可实现私有的加解密方法,并在创建MessageCoder时传入即可;
注意:本组件已实现了一个简单的加解密处理类,SimpleMessageCipher是一个动态可变的AES加解密处理类,可保证每一条数据加密都是变化的,
但整体却是固定的,其核心是通过SuperCodeGenerator对象生成顺序的密钥,并在每一次加密时从中选取一条密钥进行加密。
SimpleMessageCipher只作为加解密扩展实现的示例为用户参考,切记不可用在正式项目中,作者也不对用户在正式项目中使用该用类所产生的问题负责;
SimpleMessageCipher只作为加解密扩展实现的示例为用户参考,切记不可用在正式项目中,作者也不对用户在正式项目中使用该用类所产生的问题负责;
SimpleMessageCipher只作为加解密扩展实现的示例为用户参考,切记不可用在正式项目中,作者也不对用户在正式项目中使用该用类所产生的问题负责;
所以如果正式项目需要对正文进行加密处理,请一定要更换加解密实现方法。
MessageCompressor
数据包正文解压缩处理扩展接口,可实现私有的解压缩方法,并在创建MessageCoder时传入即可;