Python的“构造”库的Java等价物

问题描述:

Python的“构造”库有Java的等价物吗?我想写“结构”,例如:Python的“构造”库的Java等价物

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

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

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

+0

我还没有测试过它,但我也发现https://github.com/raydac/java-binary-block-parser,它似乎有Construct – 2017-07-21 11:35:06

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

这取决于你想做什么 - 你有一个固定的数据格式发送/接收有线,或者这是否会不时变化?

+0

的功能奇偶校验不是我想要的。我想做一些声明式编程。例如,有几个数据包有这个“消息”块,我必须读取长度,颜色,字体等。为了减少样板代码,我可以声明一个“消息”结构并嵌入数据包中。 – someguy 2011-03-06 17:32:49

我看了很多,我可以找到所有Ragel(www.complang.org/ragel),也可以生成Java代码。 对我来说看起来太复杂了,所以我开始做一些工作来将构建器移植到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构建的协议,如以太网,ARP和IPv4的。瞧瞧吧https://github.com/ZiglioNZ/construct

[更新:新发行]

Java结构1.1.2现已推出,见release notes