Java与Python的等价物';s";“构造”;图书馆

Java与Python的等价物';s";“构造”;图书馆,java,python,equivalent,construct,Java,Python,Equivalent,Construct,是否有与Python的“构造”库相当的Java?我想这样写“structs”: 它不一定是一个使用Java语言进行某种抽象的库。我的意思是,它可以是一种“可移植”格式,带有用于解析文档的API。我想这可以用XML解决,但它会更难看 我意识到我可以与Python交互操作,但我不想这样做。您可以使用DataInput/DataOutput(及其实现)将任何一组值从一组字节转换为一组字节。但是,这并没有给您一个可以使用名称访问单个字段的对象,您必须自己创建这样的对象 这在一定程度上取决于您想做什么-您

是否有与Python的“构造”库相当的Java?我想这样写“structs”:

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


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

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


这在一定程度上取决于您想做什么-您是否有固定的数据格式可以通过有线发送/接收,或者这种格式会随着时间的推移而变化?

我已经四处寻找,我所能找到的只有Ragel(www.compling.org/Ragel),它也可以生成Java代码。 对我来说,它看起来太复杂了,所以我开始了一些将构造移植到Java的工作。 我怀疑在Scala、Groovy或JavaScript中制作这样的东西会更容易

在GitHub上构建:

java构造:

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

[更新]

我已经移植了足够的代码来解析和构建Python构造附带的一些协议,如以太网、arp和ipv4。查看

[更新:新版本]


Java构造1.1.2现在可用,请参阅。

这不是我想要的。我想做一些声明性编程。例如,有几个包有这个“消息”块,我必须在其中读取长度、颜色、字体等。。为了减少样板代码,我可以声明一个“消息”结构并嵌入到数据包中。我还没有对它进行测试,但我还发现它似乎与构造具有相同的特性
message = Struct("message",
    UBInt8("protocol"),
    UBInt16("length"),
    MetaField("data", lambda ctx: ctx["length"])
)