簡體   English   中英

Java相當於Python的“構造”庫

[英]Java equivalent of Python's “construct” library

是否有Java的“構造”庫的Java等價物? 我想像這樣寫“結構”:

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

它不必特別是使用Java語言進行某種抽象的庫。 我的意思是,它可能是一種“可移植”格式,帶有用於解析文檔的API。 我想這可能會解決XML,但它會更難看。

我意識到我可以與Python互操作,但我不想那樣做。

我看了很多,我能找到的只是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附帶的一些協議,例如ethernet,arp和ipv4。 請訪問https://github.com/ZiglioNZ/construct查看

[更新:新版本]

Java Construct 1.1.2現已推出,請參閱發行說明

您可以使用DataInput / DataOutput (及其實現)將任何值集合從/轉換為一組字節。 但是,這並沒有為您提供一個可以使用名稱來訪問各個字段的對象 - 您必須自己創建這樣的對象。

這取決於您想要做什么 - 您是否有固定數據格式在線上發送/接收,或者這是否會不時變化?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM