Java相当于Python的“构造”库

时间:2011-03-06 16:04:04

标签: java python equivalent construct

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我看了很多,我能找到的只是Ragel(www.complang.org/ragel),它也可以生成Java代码。 对我来说这看起来太复杂了,所以我开始做一些工作来将Construct移植到Java。 我怀疑在Scala,Groovy或JavaScript中制作类似的东西会更容易。

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

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

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

[更新]

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

[更新:新版本]

Java Construct 1.1.2现已推出,请参阅release notes

答案 1 :(得分:-1)

您可以使用DataInput / DataOutput(及其实现)将任何值集合转换为/到一组字节。这不会为您提供一个可以使用名称来访问各个字段的对象 - 您必须自己创建。

这取决于您想要做什么 - 您是否有固定数据格式在线上发送/接收,或者这种情况会不时变化?