シングルスレッドで使用するには、Java でバイト バッファ クラスが必要です。O(1) の償却コストで、バッファーの後ろにデータを挿入し、前にデータを読み取ることができるはずです。バッファーは、例外などをスローするのではなく、いっぱいになったときにサイズを変更する必要があります。
自分で作成することもできますが、これが標準の Java パッケージにまだ存在していなければ非常に驚きます。
あなたは何をお勧めします?
それが「最高」かどうかはわかりませんが、ここに Circular Byte bufferの良い例があります。
これらのJava Utilities-OstermillerUtils クラスはGPL ライセンスの下にあります。
この Circular Byte Buffer は、バイトの循環バッファー プロデューサー/コンシューマー モデルを実装します。バッファーの入力と空にすることは、標準の Java InputStreams と OutputStreams で行われます。
このクラスを使用することは、PipedInputStream および PipedOutputStream を使用するよりも簡単な代替手段です。
PipedInputStreams と PipedOutputStreams は、マーク操作をサポートしておらず、それらが使用するバッファー サイズを制御できず、2 つのクラスをインスタンス化してそれらを接続する必要があるより複雑な API を持っています。
java.util.ArrayDeque<Byte>
同様の要件を持つプロジェクトで を使用しています。java.util.concurrent 実装を使用して実装を簡単に変更できることに注意してくださいQueue
。
もう 1 つの解決策は、JBoss によるGrowablePipedOutputStreamとGrowablePipedInputStreamを使用することです。