javolution.io.Struct序列化C语言数据结构
2018-01-22 16:18
711 查看
在网络传输时,我们接收到的数据都是10的形式,八个01(big)构成了一个byte字节,一个或多个byte又构成了不同的数据类型,接收到这些byte数组后,我们就需要对数组进行反序列化为java中的对象。而通过javolution.io.Struct就可以很容易的实现反序列化(序列化)
首先,我们要按照数据顺序定义结构体(java的class文件):该类型必须继承Struct,byte数组中,不同的类型按照byte数,一一对应
如char在传输中占用8bit,所以我们就用Unsigned8 (无符号8bit)来接收,int在占位32位,于是我们用Unsigned32来接收,char[]我们通过UTF8String 来接收。这样我们就定义好了如果接收一个byte数组序列了,可以通过以下两个函数指定大小端。
然后我们可以将byte数据填入到这个类中
*
首先,我们要按照数据顺序定义结构体(java的class文件):该类型必须继承Struct,byte数组中,不同的类型按照byte数,一一对应
如char在传输中占用8bit,所以我们就用Unsigned8 (无符号8bit)来接收,int在占位32位,于是我们用Unsigned32来接收,char[]我们通过UTF8String 来接收。这样我们就定义好了如果接收一个byte数组序列了,可以通过以下两个函数指定大小端。
public class BaseDataDef extends Struct{ Unsigned8 unsigned8=new Unsigned8(); Unsigned16 unsigned16=new Unsigned16(); Unsigned32 Unsigned32=new Unsigned32(); Signed8 signed8 =new Signed8(); Signed16 Signed16 =new Signed16(); Signed32 Signed32 =new Signed32(); Signed64 Signed64 =new Signed64(); UTF8String utf8String=new UTF8String(10); // 一定要加上这个,不然会出现对齐的问题 @Override public boolean isPacked() { return true; } // 设置为小端数据 @Override public ByteOrder byteOrder() { return ByteOrder.LITTLE_ENDIAN; } }
然后我们可以将byte数据填入到这个类中
@Test public void setUp() throws Exception { //这里模拟了一下数据的输入 byte[] data = new byte[221]; for (int i = 0; i < data.length; i++) { data[i] = (byte) i; } ByteBuffer b = ByteBuffer.wrap(data); //小端 b.order(ByteOrder.LITTLE_ENDIAN); BaseDataDef info=new BaseDataDef (); //设置byte数组 info.setByteBuffer(b, 0); //打印输出,这里输出byte字符串 System.out.println(info); //如果想打印每一个项,直接 System.out.println(info.unsigned16); System.out.println("#########################"); }
*
相关文章推荐
- JAVA 与C语言中struct union 字节流转换方案 Javolution
- C# XML反序列化成类时(XmlSerializer)报 System.IO.FileNotFoundException: 未能找到文件的问题
- 基于c语言严蔚敏版的数据结构—非递减线性表的合并
- c语言数据结构之顺序表
- C语言中位域(bit struct)和#pragma pack(n)指令对其影响。
- 数据结构c语言之字符串处理
- C语言:typedef struct与指针
- JavaIO 总结笔记<五> 打印流、Properties类、对象流、序列化
- 【C语言】【数据结构】菜鸟学习日志(四) 用二叉树实现非递归排序
- C语言递归的基础和数据结构的初步概念
- Java IO流与对象IO序列化
- Python的IO操作之文件读写与序列化
- 序列化和Io其他流_day19
- 数据结构C语言实现系列——线性表
- [C语言] 数据结构-衡量算法的标准
- C语言数据结构学习之数组线性表
- 数据结构--冒泡排序(C语言)
- 深入C语言之字节对齐 - [C 数据结构 算法]
- 数据结构 C语言 严蔚敏版 算法2.1
- C语言数据结构——串的堆分配