通信消息协议组件Darks Codec正式发布
2014-06-05 10:56
453 查看
通信消息协议组件Darks Codec正式发布
2014-05-16 09:58 by 见习记者
darkshadow 评论(8)
有5311人浏览 收藏
通信协议
java
编码
框架
序列化
> 猎头职位: 上海:
Junior Product Manager
Darks Codec是一个轻量级高效的通信消息协议编解码框架。它支持将JAVA对象与绝大部分基于字节的消息协议之间进行互相转换,以此协助开发人员便捷有效的快速构建消息协议,并为粘包、断包等问题提供了有效的解决方案。它能让开发人员从消息协议的实现中解脱出来,让其更多的关注于消息通信协议的设计及优化,以便让软件消息通信的整体设计更加完善。
项目开源地址:https://github.com/liulhdarks/darks-codec
项目发布地址:https://github.com/liulhdarks/darks-codec/releases
Version 1.0.3 release特性支持:
支持采用JAVA对象定义简单或复杂的消息协议。
支持JAVA对象与通信协议字节流之间进行互相转换。
支持多种策略动态计算字节流总长度。
支持向消息协议增加CRC16、ADLER32、自定义等校验码。
支持对消息协议字节流进行多种类型或自定义方式的压缩处理。
支持对消息协议字节流进行多种类型或自定义方式的加密处理。
支持自定义协议Wrapper,以此实现更多扩展功能。
支持复杂对象协议转换。
支持多种数据类型,数据类型可自定义。
支持数组类型数据。
支持数据长度自动计算。
支持简洁的JAVA对象序列化/反序列化方法,生成的字节流简洁可配去冗余。
简单的配置方式
只需要几行参数设置便能实现基础的消息协议。例如一个基于LITTLE-ENDIAN的协议:
Protocol代码
FB FA [ID 32bits] [VERSION 8bits] [COMMAND] FF
只需简单构建JAVA对象
Java代码
public class SimpleMsg { int id; byte version; String command; }
然后构建编码器
Java代码
ObjectCoder coder = new ObjectCoder(); //设置LITTLE-ENDIAN coder.getCodecConfig().setEndianType(EndianType.LITTLE); //添加前置标识为0xFAFB,后置标识位0xFF coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB), new OCInt8(0xFF)));
填充数据并编码
Java代码
SimpleMsg msg = new SimpleMsg(); msg.id = 32; msg.version = 1; msg.command = "running"; byte[] bytes = coder.encode(msg); //编码
输出的结果为
Protocol代码
FB FA 20 00 00 00 01 72 75 6E 6E 69 6E 67 FF
动态长度计算
除了采用前置和后置标识的方式来避免粘包断包问题外,还可以使用前置标识加总长度的方式。如果将编码器修改为
Java代码
//设置总长度类型,HEAD_BODY表示总长度包含头长度和内容长度,除此之外还有BODY/AUTO coder.getCodecConfig().setTotalLengthType(TotalLengthType.HEAD_BODY); //只添加前置标识 coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB)));
输出结果为
Protocol代码
FB FA 12 00 00 00 20 00 00 00 01 72 75 6E 6E 69 6E 67
协议封装体
通过协议封装体能够实现添加校验码、加密、压缩、标识等功能,开发者可以自定义封装体在编解码前/后期处理协议数据。
对象精简序列化
JAVA自身的序列化会自动增加较多的附加数据,在部分情况下过于冗余。通过Darks Codec的ObjectSerial可以轻松序列化对象,对象无需实现Serializable接口,并且生成的字节精简有效可配,更可以避免粘包断包等问题。
更多功能详细请参见官网 README.MD
通信消息协议组件Darks Codec正式发布
2014-05-16 09:58 by 见习记者
darkshadow 评论(8)
有5311人浏览 收藏
通信协议
java
编码
框架
序列化
声明:ITeye资讯文章的版权属于ITeye网站所有,严禁任何网站转载本文,否则必将追究法律责任!
<> 猎头职位: 上海:
Junior Product Manager
Darks Codec是一个轻量级高效的通信消息协议编解码框架。它支持将JAVA对象与绝大部分基于字节的消息协议之间进行互相转换,以此协助开发人员便捷有效的快速构建消息协议,并为粘包、断包等问题提供了有效的解决方案。它能让开发人员从消息协议的实现中解脱出来,让其更多的关注于消息通信协议的设计及优化,以便让软件消息通信的整体设计更加完善。
项目开源地址:https://github.com/liulhdarks/darks-codec
项目发布地址:https://github.com/liulhdarks/darks-codec/releases
Version 1.0.3 release特性支持:
支持采用JAVA对象定义简单或复杂的消息协议。
支持JAVA对象与通信协议字节流之间进行互相转换。
支持多种策略动态计算字节流总长度。
支持向消息协议增加CRC16、ADLER32、自定义等校验码。
支持对消息协议字节流进行多种类型或自定义方式的压缩处理。
支持对消息协议字节流进行多种类型或自定义方式的加密处理。
支持自定义协议Wrapper,以此实现更多扩展功能。
支持复杂对象协议转换。
支持多种数据类型,数据类型可自定义。
支持数组类型数据。
支持数据长度自动计算。
支持简洁的JAVA对象序列化/反序列化方法,生成的字节流简洁可配去冗余。
简单的配置方式
只需要几行参数设置便能实现基础的消息协议。例如一个基于LITTLE-ENDIAN的协议:
Protocol代码
FB FA [ID 32bits] [VERSION 8bits] [COMMAND] FF
FB FA [ID 32bits] [VERSION 8bits] [COMMAND] FF
只需简单构建JAVA对象
Java代码
public class SimpleMsg { int id; byte version; String command; }
public class SimpleMsg { int id; byte version; String command; }
然后构建编码器
Java代码
ObjectCoder coder = new ObjectCoder(); //设置LITTLE-ENDIAN coder.getCodecConfig().setEndianType(EndianType.LITTLE); //添加前置标识为0xFAFB,后置标识位0xFF coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB), new OCInt8(0xFF)));
ObjectCoder coder = new ObjectCoder(); //设置LITTLE-ENDIAN coder.getCodecConfig().setEndianType(EndianType.LITTLE); //添加前置标识为0xFAFB,后置标识位0xFF coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB), new OCInt8(0xFF)));
填充数据并编码
Java代码
SimpleMsg msg = new SimpleMsg(); msg.id = 32; msg.version = 1; msg.command = "running"; byte[] bytes = coder.encode(msg); //编码
SimpleMsg msg = new SimpleMsg(); msg.id = 32; msg.version = 1; msg.command = "running"; byte[] bytes = coder.encode(msg); //编码
输出的结果为
Protocol代码
FB FA 20 00 00 00 01 72 75 6E 6E 69 6E 67 FF
FB FA 20 00 00 00 01 72 75 6E 6E 69 6E 67 FF
动态长度计算
除了采用前置和后置标识的方式来避免粘包断包问题外,还可以使用前置标识加总长度的方式。如果将编码器修改为
Java代码
//设置总长度类型,HEAD_BODY表示总长度包含头长度和内容长度,除此之外还有BODY/AUTO coder.getCodecConfig().setTotalLengthType(TotalLengthType.HEAD_BODY); //只添加前置标识 coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB)));
//设置总长度类型,HEAD_BODY表示总长度包含头长度和内容长度,除此之外还有BODY/AUTO coder.getCodecConfig().setTotalLengthType(TotalLengthType.HEAD_BODY); //只添加前置标识 coder.getCodecConfig().addWrap(new IdentifyWrapper(new OCInt16(0xFAFB)));
输出结果为
Protocol代码
FB FA 12 00 00 00 20 00 00 00 01 72 75 6E 6E 69 6E 67
FB FA 12 00 00 00 20 00 00 00 01 72 75 6E 6E 69 6E 67
协议封装体
通过协议封装体能够实现添加校验码、加密、压缩、标识等功能,开发者可以自定义封装体在编解码前/后期处理协议数据。
对象精简序列化
JAVA自身的序列化会自动增加较多的附加数据,在部分情况下过于冗余。通过Darks Codec的ObjectSerial可以轻松序列化对象,对象无需实现Serializable接口,并且生成的字节精简有效可配,更可以避免粘包断包等问题。
更多功能详细请参见官网 README.MD
相关文章推荐
- ESFramework介绍之(1)――网络通信消息协议接口IContract
- 发布一个biztalk 解析Excel文件到xml消息的管道组件
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- 发布自己写的Pop3协议组件
- c#中异步基于消息通信的完成端口的TCP-IP协议的组件实现(服务器端-源代码)
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- c#中异步基于消息通信的完成端口的TCP/IP协议的组件实现(客户端-源代码)
- 日前有消息称,微软已经同意收购语义搜索引擎Powerset,收购价格将略高于1亿美元.微软将于下月发布正式声明.Powerset公司位于旧金山,其搜索引擎技术能够理解用户输入的短语的真实含义,并在这种理解的基础上返回搜索结果.
- 发布一个biztalk 解析Excel文件到xml消息的管道组件
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- ESFramework介绍之(1)――网络通信消息协议接口IContract
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- CC China 2.5 协议正式发布
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- DataGridView 打印专家组件2.0版正式发布
- 向日葵甘特图组件1.2版正式发布
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件
- Apache Geronimo 1.0 正式发布 - 明天来详细分析其组件