在java中,对象的序列化方案还是很多的。但是如果是涉及到私有协议序列化,则显得比较难受。
相对于C之类的语言来说,它们天生支持将字节数据强制转换为结构体。这种跨语言通讯很多出现在iot对接。
这里推一个框架magic-byte; 可以根据协议进行数据结构定义,定义完成后可以直接进行序列化和反序列化。
例如定义一个对象:
@MagicClass(autoTrim = true)
public class Student {
// 普通数据, 字符串长度为 10
@MagicField(order = 1, size = 10)
private String name;
// 普通数据, 整数, 此字段决定后续 phones 字段长度
@MagicField(order = 2)
private int length;
// 此List并未直接指定大小, 大小由 length 字段决定
@MagicField(order = 3, dynamicSizeOf = 2)
private List<Long> phones;
@MagicField(order = 4)
private byte age;
// getter and setter ...
}
然后就可以直接进行序列化和反序列化了:
void main() {
byte[] bytes = MagicByte.unpack(school);
Student school2 = MagicByte.pack(bytes, Student .class); // bytes to object
System.out.println(school.getAge() == Student .getAge()); // out put true
}
引入maven:
<dependency>
<groupId>io.github.misterchangray</groupId>
<artifactId>magic-byte</artifactId>
<version>2.4.1</version>
</dependency>
然后就可以直接使用了,这样开发就舒服多了。