其实java开发中, 将对象转为字节或者字节转对象一般来说很少使用的。上层协议一般使用的是文本形式,不如xml, json什么的。下面的场景java自定义字节和对象直接的转换都可以参考的。
一般来说 需要自定义转换就是涉及到跨语言。特别是物联网或者和单片机进行通讯, 此种场景一般采用私有协议。 C语言就很简单。 直接进行转换就可以了。 但是java就不行了。 需要使用bytebuffer 根据协议一个一个读取并赋值到对象中。
上面的方式需要注意的太多了。 大小端, 空值, 字节对齐等等。
最近发现一个比较好用的框架,可以帮我一键再 字节和对象之间转换。 无论字节转对象还是对象转字节都想json一样方便。
1. 引入jar包
<dependency>
<groupId>io.github.misterchangray</groupId>
<artifactId>magic-byte</artifactId>
<version>2.0.1</version>
</dependency>
2. 定义和结构体映射的对象
在这里指定了每个字段的大小, 和顺序。其他数据类型和大小参考文档
@MagicClass(byteOrder = ByteOrder.BIG_ENDIAN)
public class Teacher {
// 4 byte
@MagicField(order = 1)
private int id;
// 10 byte
@MagicField(order = 2, size = 10)
private String name;
// 4 byte
@MagicField(order = 3)
private int phoneSize;
// getter and setter
}
3. 使用工具类进行转换,对象转字节。
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.setName("zhang3");
teacher.setId(38);
teacher.setPhoneSize(55);
byte[] unpack = MagicByte.unpackToByte(teacher);
}
4. 字节转对象
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.setName("zhang3");
teacher.setId(38);
teacher.setPhoneSize(55);
byte[] unpack = MagicByte.unpackToByte(teacher);
Teacher teacher1 = MagicByte.pack(unpack, Teacher.class);
}
我感觉这样可以省不少代码量【手动狗头】
这里贴下GITHUB链接。 方便大家查看文档。