gpt4 book ai didi

java - 为二进制消息格式编写解析器

转载 作者:行者123 更新时间:2023-12-02 04:25:50 25 4
gpt4 key购买 nike

我需要开发一个用于二进制消息交换格式的解析器,即将二进制消息解析为java对象表示的消息解析器。我想问什么有用的模式可以用来以最灵活的方式实现解析器。有人可以简要描述一下这一点或提供阅读资源吗?

最佳答案

由于您尝试读取二进制数据并将其转换为 Java 对象,因此有很多方法,但首先,您必须了解二进制数据的结构/协议(protocol)。

我向您展示的模式是我(如果我是您)将用于此场景的样式。

确保您有一个可以输出二进制数据的输入流。如果您拥有的是字节数组,请创建一个 ByteArrayInputStream。

在对象图中,每个节点/对象都应该实现类似 parseIn(InputStream s) 方法。

public class Parent extends ArrayList<Child> {
int age;
// ... more code here
public void parseIn(InputStream is) throws IOException {
// .. logic to read the stream into this instance.
DataInputStream dis = new DataInputStream(is);
this.age = dis.readInt();

// .. if necessary
Child c = new Child();
c.parseIn(InputStream is);
this.add(c);
}
// ... more code here
}

public class Child {
int height;
short weight;
Date birthdate;
public void parseIn(InputStream is) throws IOException {
// .. logic to read the stream into this instance.
DataInputStream dis = new DataInputStream(is);
height = dis.readInt();
weight = dis.readShort();
birthdate = new Date(dis.readLong());
}
}

因此,当您获得流时,您只需

InputStream stream = this.getInputStream(); 
Parent p = new Parent();
parent.parseIn(stream);

诸如此类。

有时,您需要读取底层流以获得需要向前阅读的一些提示。例如读取二进制流中的字符串数据时。要么继续逐字节读取,直到找到终止符字节(从 C 的样式 0 终止符开始)。或者提供第一个字节的字符串长度,然后读取该长度的字节数组。

我希望你能明白这个想法。我希望它能有所帮助。

关于java - 为二进制消息格式编写解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com