gpt4 book ai didi

java - 在 Java 中使用 C 结构

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:16 25 4
gpt4 key购买 nike

我必须编写一个 Java 程序来接收来自网络的消息并将其内容显示给用户。问题是我收到的消息只是 C 结构的二进制转储。除此之外,一些消息来自小端机器,一些来自大端机器,而字段没有被转换为网络字节顺序。我拥有的一种方法是使用 JNI 并将 c 结构转换为一些 XML 字符串,然后将此 XML 字符串反序列化为 Java 对象。这是一项艰巨的工作,因为大约有 122 个不同的结构,每个结构都包含 20 多个字段。我想知道是否有一个库/工具/方法可以让我的工作变得容易一些?

最佳答案

有一个名为 Preon 的库旨在帮助您完成此类任务:Preon site基本上,他们试图将所有用于从二进制流中读取 pojo 的逻辑保留在绑定(bind)到 pojo 中每个字段的注释中。

他们的文档中的一个示例,您可以在其中控制正在阅读的 int 的大小:

class Rectangle
{
@BoundNumber(size="16") private int x1;
@BoundNumber(size="16") private int y1;
@BoundNumber(size="16") private int x2;
@BoundNumber(size="16") private int y2;
}

或指定字节顺序:

class Rectangle
{
@BoundNumber(byteOrder=LittleEndian) private int x1;
@BoundNumber(byteOrder=LittleEndian) private int y1;
@BoundNumber(byteOrder=LittleEndian) private int x2;
@BoundNumber(byteOrder=LittleEndian) private int y2;
}

您甚至可以使用引用先前字段中的值的迷你方程式来指定大小/长度等。

@BoundList(size="width * height") byte[] pixels;
@BoundNumber(size="nrBits * 2") int value;

哦,他们还提供条件逻辑,都在注释中。

关于java - 在 Java 中使用 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287903/

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