我必须编写一个Java程序,它将从网络接收消息并将其内容显示给用户.问题是我收到的消息只是C结构的二进制转储.除此之外,一些消息来自小端机器,一些来自大端,没有字段转换为网络字节顺序.我的一种方法是使用JNI并将c结构转换为某些XML字符串,然后将此XML字符串序列化为Java对象.这是一项艰巨的工作,因为大约有122种不同的结构,每种结构都包含20多个区域.我想知道是否有一个图书馆/工具/方法可以让我的工作变得有点容易?
有一个名为Preon的库,旨在帮助您完成这类任务:Preon站点 基本上,他们会尝试保留所有用于从二进制流中读取pojo的逻辑,并在注释中绑定到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;
}
Run Code Online (Sandbox Code Playgroud)
或指定字节顺序:
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;
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用迷你方程式来引用先前字段中的值来指定大小/长度等.
@BoundList(size="width * height") byte[] pixels;
@BoundNumber(size="nrBits * 2") int value;
Run Code Online (Sandbox Code Playgroud)
哦,他们还提供条件逻辑,所有这些都在注释中.
| 归档时间: |
|
| 查看次数: |
10003 次 |
| 最近记录: |