問題タブ [preon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Preonでの可変レコード長の解析
Preonを使用して、可変長レコードのシーケンスとして構造化されたバイナリファイルを解析しようとしています。レコードごとに、レコード長(バイト単位)を指定する数値があります。
これが私がやろうとしていることの単純化されたバージョンです:
したがって、numberOfRecordsはファイル内のレコード数を指定し、recordLengthは各レコードの長さを指定します。問題は、numberOfRecordsはBinFileで正常に機能しますが、PreonがRecordのrecordLengthを解決できないことです。
これが私が得る例外です:
size = "recordLength"を定数(たとえばsize = "42")に変更しても、例外は発生しません(ただし、もちろん、レコード長は常に同じである必要があります)。
レコード長を可変にする他の方法はありますか、それとも別の方法で整理する必要がありますか?
興味のある方は、これが私が使用したJUnitテストです。
java - Preon の符号付き整数と符号なし整数
Cで記述されたサーバーと通信するプロジェクトにPreonを使用したい.プロトコルはマシンのネイティブエンディアンに依存し(java.nio.ByteOrder.getNative()
JVMがサーバーと同じエンディアンを持っているという仮定の下でこれで解決できます)、uint64_t
データに使用します長さとint32_t
ステータス コード (負の値はエラーを示します)。
Preon のドキュメントには署名に関する情報が見つかりませんでした。ソースコードをざっと見てみると、符号nl.flotsam.preon.buffer.DefaultBitBuffer
付きシフト (<<
および>>
) を使用していることがわかりました。また、いくつかのメソッドの javadoc コメントは、符号付き整数を使用nl.flotsam.preon.buffer.BitBuffer
していることを示していますが、javadoc コメントnl.flotsam.preon.buffer.BitBuffer
は、BitBuffer
符号なし整数を使用していると述べています。これは私を混乱させました。
Preon のデフォルトの整数形式は何ですか? uint64_t
とをどのように表すint32_t
か?
java - Preonを使用したバイトアラインメントの問題
みなさん、こんにちは:)私は現在、空き時間プロジェクトにpreonを使用していますが、次の問題が発生しました。次のコードで固定長の文字列を読み取ろうとしています。
ファイル仕様では可変パディングが想定されているため、次のブロックのオフセットは4の倍数になります。たとえば、string_size = 5の場合、3つのnullバイトが追加されます。最初は@ByteAlignアノテーションがまさにこれを行っていると思っていましたが、ソースコードを調べてみると、そうではないことがわかりました。
私はこのクイックフィックスを作成しようとしました:
残念ながら、Limboは「%」演算子をサポートしていないようです。これを回避する方法はありますか?
(また、最新バージョンはどこで/どのように入手できますか?)よろしくお願いします。
stream - 可変長シーケンス、シーケンスの終わりを示す最初のビット、プレオン
最初のビット(BigEndian)がPreonを使用して別のバイトが続いているかどうかを示す、可変長のバイトシーケンスをどのように解析しますか?
例
ノート
- 次のビットが最終ペイロードで破棄されることを示す最初のビット
- この投稿に使用されたPreonのバージョンは1.1でした
結果バイト(10進数)
{114、63、63、63、80}
すでに試しました
@BoundList + @Choices(条件付き)
Limbo exp langはメソッド呼び出しをサポートしていないため、ストリームの終わりを検出できません(前のブロックには符号1が必要で、現在のブロックは最後である必要があります。つまり、符号は0である必要があります)
@Ifを使用した再帰的アプローチ
何らかの理由で、たとえば上記のように、Preonは、3つあるはずの場合でも、エントリの2つのインスタンス(親と子)のみを解析します。
ありがとう。
java - Android上のプレオン
Android 2.1 で Preon のサンプル アプリケーションを実行しようとしましたが、うまくいきませんでした。Android で Preon アプリケーションを実行することさえ可能なのでしょうか。Preon フレームワークの Dalvik を使いやすくするのはどれくらい難しいでしょうか?
Preon は、宣言的な方法でビットストリーム圧縮データのコーデックを構築するための Java ライブラリです。JAXB や Hibernate を考えてみてください。ただし、Wilfred Springer によって記述されたバイナリ エンコード データについて考えてみてください。
以下は、Android で Preon を使用する単純なアプリケーションを実行しようとしたときの私の発見です。
Preon は Pecia に依存しています。Pecia は、Android でそのままではサポートされていない stax-api に間接的に依存しています。Preon コア処理で stax-api を使用していますか? Preon の依存関係から stax-api を除外できますか?
pecia を依存関係から除外した後 (結果を知らずに)、preon が log4j.properties ファイルの複数のコピーを持っていることがわかりました。log4j.properties ファイルを preon および pecia プロジェクトの /src/test/resources ディレクトリに移動して、クラスに持ち込まないようにすることをお勧めします。
log4j.properties ファイルが重複しているため、android-maven-plugin はパッケージのゴールで失敗し、次のメッセージが表示されます。
[情報] java.util.zip.ZipException: エントリが重複しています: log4j.properties
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報] ビルドの失敗
[情報] - - - - - - - - - - - - - - - - - - - - - - - - -------------------------
[情報] 合計時間: 19.717 秒
[情報] 終了: 2011 年 3 月 23 日水曜日 14:30:55 PST
[情報] 最終記憶: 7M/62M
java - Preonに相当するJavaまたはC++?
Preonは、バイナリコーデックを作成するためのJavaライブラリです。ビットフィールドとの対応(たとえば、特定のフィールドに使用するビット数)に関して、クラスのデータメンバーに注釈を付けるだけで、そのようなクラスに基づいて、ライブラリがコーデックを構築します。バイナリ入力ストリームからデータを読み取るクラスのインスタンスを作成できるオブジェクト。
ライセンスの問題(GPLで配布されている)のため、使用できません。
JavaまたはC++のいずれかで、同等または類似の機能を備えたライブラリはありますか?
java - preon で配列を使用して配列をモデル化するにはどうすればよいですか
ここで問題が発生しました。いくつかのことを試しましたが、おそらく初期化できません。
私のArrayObjectには、ArrayObject(循環依存)を保持できるSerializedDataのリストがあります。@LazyLoading を使用してみましたが、これは役に立ちません。
java - 最初のバイトに応じて異なるパケット タイプを解析する方法
preon を使用して mysql の結果パケットを解析しようとしています。パケットは次のようになります。
nn xx yy yy yy zz zz zz
私はこのようにそれを解析します
私は@BoundObject
このような注釈を使用してみました:
OkResponsePayload
およびに対しては完全に正常に動作しますErrorResponsePayload
がResultResponsePayload
Codec
、プレフィックスの識別に使用される最初のバイトにアクセスできなくなりました。
私の最初のアイデアは custom を書くことでしたCodec<ResponsePacket>
。デコード内で最初のバイトを読み取ることができ、その値に応じて新しいコーデックをインスタンス化して残りのバッファを解析することができました。
このような場合の問題は、式で役立つ場合がある packet( nn
) の合計サイズに関する情報が得られないことです。また、このように動作する他の構造があるようです (最初のバイトがタイプを決定します)。これには、手作業で多くのコードを記述する必要があります。
誰かが私にもっときれいな解決策を教えてくれることを願っています。
java - Java を使用してファイル ヘッダーを読み取る
Java を使用してファイル ヘッダーを読み込もうとしています。ファイルの種類 (画像、音声など) を取得したいと考えています。私は多くの例を試しましたが、何もうまくいかないようです。preon を試してみましたが、うまくいきませんでした。preon やその他の Java API を使用してファイル ヘッダーを読み取る方法を教えてください...
java - preon は Bean プロパティをどのように使用できますか?
バイト配列のサイズがオプションの値と定数に依存するバイナリ ファイルを読み取る必要があります。Preonを使用してこれを達成するにはどうすればよいですか?
バイト配列サイズの計算は条件付きではできないようです。size="adaptationFieldControl==0b10 || adaptFieldControl==0b11 ? 184-adaptationFieldLength : 184"
メソッド (以下のサンプルを参照) を使用して動的サイズを計算すると、Preon は「Caused by: org.codehaus.preon.el.BindingException: Failed to create binding for bound data called getPayloadLength.
...