如何将PLC字节流转换为JSON或Java对象?求支持的反序列化框架
当然有不少框架能搞定这类结构化字节流的反序列化需求,结合你给出的PLC数据结构场景,我给你推荐几个实用的方案:
推荐框架及实现思路
1. Jackson(搭配自定义反序列化器)
Jackson是Java生态里处理JSON最常用的库,虽然它默认聚焦JSON处理,但你可以通过自定义反序列化器来解析字节流,再转成JSON或Java对象,完美适配你的需求。
核心步骤:
- 先定义对应的数据类:
public class Data { private int id; private int[] pos; private int time; // PLC的dint对应Java的int(32位有符号整数) // 构造器、getter、setter省略 }
- 编写自定义
JsonDeserializer,利用ByteBuffer按约定顺序解析字节:
从字节流里依次读取2字节的id、4个2字节的pos元素、4字节的time,组装成Data对象后,Jackson就能直接把它序列化成你要的JSON格式。
2. Netty ByteBuf + 自定义编解码器
如果你的场景是和PLC直接做网络通信,Netty的ByteBuf工具类对字节流的处理非常高效。你可以自定义一个解码器,按照PLC的数据结构约定解析字节,转换成Java对象后再转JSON。
解码器核心示例:
public class DataDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { // 先判断字节数是否足够:2(id) + 4*2(pos) + 4(time) = 14字节 if (in.readableBytes() < 14) { return; } int id = in.readShort(); // 对应示例里的2字节int int[] pos = new int[4]; for (int i = 0; i < 4; i++) { pos[i] = in.readShort(); } int time = in.readInt(); // 对应PLC的dint类型 Data data = new Data(id, pos, time); out.add(data); // 转成目标JSON String json = new ObjectMapper().writeValueAsString(data); System.out.println(json); } }
3. 专门的PLC通信框架
如果是直接和PLC交互,还有一些针对性的框架能帮你省掉手动解析字节的麻烦:
- S7-JLib:针对西门子PLC,可直接读取DB块数据,按照你定义的
Data结构自动映射成Java对象 - EtherNet/IP Java库:适配罗克韦尔等支持EtherNet/IP协议的PLC,同样支持结构化数据映射
这类框架已经封装了PLC的字节协议细节,拿到Java对象后转JSON就是一行代码的事。
4. 手动解析(ByteBuffer)
如果数据结构固定且场景简单,直接用JDK自带的ByteBuffer手动解析也很灵活,不需要额外依赖:
byte[] bytes = {0,5,0,1,0,2,0,3,0,4,0,0,0,5}; ByteBuffer buffer = ByteBuffer.wrap(bytes).order(ByteOrder.BIG_ENDIAN); // 示例是大端字节序 int id = buffer.getShort(); int[] pos = new int[4]; for (int i = 0; i < 4; i++) { pos[i] = buffer.getShort(); } int time = buffer.getInt(); Data data = new Data(id, pos, time); // 转JSON ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(data); // 输出结果:{"id":5,"pos":[1,2,3,4],"time":5}
总结
如果只是单纯处理字节流转对象/JSON,Jackson自定义反序列化或ByteBuffer手动解析就足够;如果是和PLC通信,专门的PLC框架会更省心,能帮你规避协议细节的坑。
内容的提问来源于stack exchange,提问作者user2071938
相关产品推荐
相关产品推荐

