2

Python の "construct" ライブラリに相当する Java はありますか? 次のように「構造体」を書きたいと思います。

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

Java 言語を使用した何らかの抽象化を備えたライブラリである必要はありません。つまり、ドキュメントを解析するための API を備えた「移植可能な」形式になる可能性があります。これは XML でうまくいくと思いますが、もっと醜いものになるでしょう。

Python と相互運用できることはわかっていますが、そうしたくありません。

4

2 に答える 2

2

私はいろいろ調べましたが、Java コードを生成できる Ragel (www.complang.org/ragel) しか見つかりませんでした。私には複雑すぎるように見えたので、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 です。これは大きなタスクなので、ByteBuffer 用の単純なパーサーやフォーマッターの作成など、小さなことに焦点を当てたいと思います。

[アップデート]

イーサネット、arp、ipv4 など、Python Construct に付属するプロトコルの一部を解析して構築するのに十分なコードを移植しました。https://github.com/ZiglioNZ/constructで確認してください。

[更新: 新しいリリース]

Java Construct 1.1.2 が利用可能になりました。リリース ノートを参照してください。

于 2011-12-22T12:03:37.350 に答える
-1

DataInput/ (およびその実装) を使用DataOutputして、任意の値のセットをバイトのセットとの間で変換できます。ただし、これは、名前を使用して個々のフィールドにアクセスできるオブジェクトを提供しません。そのようなものを自分で作成する必要があります。

それはあなたが何をしたいのかによって少し異なります.有線で送受信するための固定データ形式がありますか?それとも時々変化しますか?

于 2011-03-06T16:21:41.903 に答える