2011-03-06 88 views
3

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

回答

-1

您可以使用DataInput/DataOutput(及其實現)將任何一組值從/轉換爲一組字節。這不會給你一個對象,你可以使用名字來訪問單個字段,但是你必須自己創建。

這取決於你想做什麼 - 你有一個固定的數據格式發送/接收有線,或者這是否會不時變化?

+0

的功能奇偶校驗不是我想要的。我想做一些聲明式編程。例如,有幾個數據包有這個「消息」塊,我必須讀取長度,顏色,字體等。爲了減少樣板代碼,我可以聲明一個「消息」結構並嵌入數據包中。 – someguy 2011-03-06 17:32:49

2

我看了很多,我可以找到所有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