バイナリデータのストリームを処理するコードを記述しています。バイト配列で表されるチャンクで受信されます。結合すると、バイト配列はメッセージの連続ストリームを表し、それぞれは同じ定数ターミネーター値(私の場合は0xff)で終わります。ただし、ターミネータ値は、任意のデータチャンクの任意のポイントに表示できます。 1つのチャンクには、メッセージの一部、複数のメッセージなどが含まれています。このデータは、これらのメッセージに変換する必要がありますJavaでバイナリデータをトークン化
[0x00, 0x0a, 0xff, 0x01]
[0x01, 0x01]
[0xff, 0x01, 0xff]
:
[0x00, 0x0a, 0xff]
[0x01, 0x01, 0x01, 0xff]
[0x01, 0xff]
私が処理するために、小さなクラスを書かれている。ここ
は、このことにより、扱うデータがどのように見えるかの小さなサンプルですこの。いくつかのデータをバイト配列形式で追加し、それをバッファ配列に配置する方法があります。ターミネータ文字に遭遇すると、バイト配列がクリアされ、メッセージ全体がメッセージキューに置かれます。メッセージキューには、hasNext()メソッドとnext()メソッド(イテレータと同様)を使用してアクセスできます。
この解決策はうまくいきますが、私がそれを終えたとき、代わりに使用できる確立されたライブラリに安定した、パフォーマンスの良い、テスト済みのコードがすでに存在する可能性があることに気付きました。
私の質問です。あなたはそのようなクラスを持つユーティリティライブラリを知っていますか、それとも既にこれを行うことができる標準のJava 6ライブラリに何かがありますか?
(byte) 0xFF == -1
として。バッファリングされたバイトストリームの子クラスを使うことができます。これは '0xff'のバイトごとのテストを行うことができます。場合によっては、パイプラインを利用できます。[PipedInputStream](http://docs.oracle.com/javase/6/docs/api/java/io/PipedInputStream.html)などを参照してください。 –