4

Javaで可変長ビット文字列を使用してバイナリデータをデコードする最良の方法を誰か教えてもらえますか?

例えば:

バイナリ データは 10101000 11100010 01100001 01010111 01110001 01010110 です。

次の 01、100、110、1110、1010 のいずれかの最初の一致を見つける必要があるかもしれません...

この場合、一致は 1010 になります。残りのバイナリ データについても同じことを行う必要があります。ビット文字列の長さは最大 16 ビットで、バイト境界を越えることができます。

基本的に、ヘッダーのハフマン テーブルから作成したビット文字列を使用して、JPEG をハフマン デコードしようとしています。私はそれを行うことができますが、それは非常に面倒です。バイナリデータを含むすべてを最初に Stringbuffers に変換していますが、それが正しい方法ではないことはわかっています。

文字列バッファにすべてをロードする前に、バイナリの数値だけを使用してみましたが、もちろん、00011 のようなコードの先頭の 0 を無視することはできません。ビットごとの演算子などを使用して、何らかの巧妙な方法があるはずです。これですが、ビットマスクや左方向シフトなどを説明するページをじっと見つめていましたが、まだ手がかりがありません!

助けてくれてありがとう!

編集:

すべての提案をありがとう。ハフマンのものでは標準的な方法のように思われるので、私は二分木アプローチを採用しました。ハフマン コードはツリーを使用して作成されるため、これは非常に理にかなっています。また、検索に必要なバイナリ データを大きな整数に格納する方法についても検討します。複数の回答を正解としてマークする方法がわかりませんが、ありがとうございます。

4

5 に答える 5

3

ハフマン符号化データをデコードしているので、バイナリ ツリーを作成する必要があります。ここで、葉はデコードされたビット文字列をデータとして保持し、各ハフマン コードのビットは対応するデータへのパスです。ハフマン コードのビットは、ビット シフトおよびビット マスク操作でアクセスされます。葉に到達したら、その葉でデータを出力し、ツリーのルートに戻ります。非常に高速で効率的です。

于 2009-03-17T23:41:59.687 に答える
1

試してみることをお勧めします。プレフィックス検索用に明示的に設計されています。あなたの場合、それはバイナリトライになります。

于 2009-03-17T23:57:36.047 に答える