Javaで利用可能な最適なサイズ変更可能な循環バイトバッファとは何ですか?
質問
シングルスレッドで使用するには、Javaのバイトバッファクラスが必要です。 O(1)の償却コストで、バッファーの後ろにデータを挿入し、前にデータを読み取ることができるはずです。バッファは、例外などをスローするのではなく、いっぱいになるとサイズを変更する必要があります。
自分で作成することもできますが、これが標準のJavaパッケージにまだ存在していない場合は非常に驚くでしょう。 。
何をお勧めしますか?
解決
<!> quot; the best <!> quot;かどうかはわかりませんが、ここに循環バイトバッファ。
Java Utilities-OstermillerUtils クラスは GPLライセンス。
この循環バイトバッファは、バイトの循環バッファプロデューサ/コンシューマモデルを実装します。バッファの充填と空化は、標準のJava InputStreamsおよびOutputStreamsで行われます。
このクラスを使用すると、PipedInputStreamおよびPipedOutputStreamを使用するよりも簡単な方法になります。
PipedInputStreamsとPipedOutputStreamsは、マーク操作をサポートせず、使用するバッファーサイズを制御できません。また、2つのクラスをインスタンス化して接続する必要があるより複雑なAPIがあります。
他のヒント
これはうまく機能するのだろうか
Apacheライセンスであるため、おそらくこれを試してみます。
同様の要件を持つプロジェクトでjava.util.ArrayDeque<Byte>
を使用しています。 java.util.concurrent Queue
を使用して実装を簡単に変更できることに注意してください。
実装。
このようなクラスを作成しました: ByteRingBuffer
自動的にはサイズ変更されませんが、resize()メソッドがあります。
<!> quot;よくテストされた<!> quot;乱数を使用してすべての可能な状況をテストする自動テストプログラムを使用します。
別の解決策は、 GrowablePipedOutputStream および GrowablePipedInputStream by JBoss。