2

是否有 Python 的“构造”库的 Java 等价物?我想这样写“结构”:

message = Struct("message",
    UBInt8("protocol"),
    UBInt16("length"),
    MetaField("data", lambda ctx: ctx["length"])
)

它不必专门是一个使用 Java 语言进行某种抽象的库。我的意思是,它可能是一种“便携式”格式,带有用于解析文档的 API。我想这可以用 XML 解决,但它会更难看。

我意识到我可以与 Python 进行互操作,但我不想这样做。

4

2 回答 2

2

我环顾四周,只能找到 Ragel (www.complang.org/ragel),它也可以生成 Java 代码。它看起来对我来说太复杂了,所以我开始着手将 Construct 移植到 Java。我怀疑用 Scala、Groovy 或 JavaScript 做类似的东西会更容易。

在 GitHub 上构建: https ://github.com/MostAwesomeDude/construct

java构造:https ://github.com/ZiglioNZ/construct

我花了几天时间,主要是在寻找 python 的表达类的等价物。我发现的最有用的 java 类是:java.util.Scanner、java.util.Formatter 和 java.nio.ByteBuffer。这是一项艰巨的任务,所以我想专注于一些小的事情,比如为 ByteBuffers 创建简单的解析器和格式化程序。

[更新]

我已经移植了足够的代码来解析和构建 Python Construct 附带的一些协议,例如以太网、arp 和 ipv4。查看https://github.com/ZiglioNZ/construct

[更新:新版本]

Java Construct 1.1.2 现已推出,请参阅发行说明

于 2011-12-22T12:03:37.350 回答
-1

您可以使用DataInput/ DataOutput(及其实现)将任何一组值从/转换为一组字节。但是,这并没有给您一个对象,您可以在其中使用名称来访问各个字段 - 您必须自己创建这样的对象。

这在一定程度上取决于您想要做什么——您是否有固定的数据格式来在线发送/接收,或者这是否会不时变化?

于 2011-03-06T16:21:41.903 回答