Javaで利用可能な最適なサイズ変更可能な循環バイトバッファとは何ですか?

StackOverflow https://stackoverflow.com/questions/325602

  •  11-07-2019
  •  | 
  •  

質問

シングルスレッドで使用するには、Javaのバイトバッファクラスが必要です。 O(1)の償却コストで、バッファーの後ろにデータを挿入し、前にデータを読み取ることができるはずです。バッファは、例外などをスローするのではなく、いっぱいになるとサイズを変更する必要があります。

自分で作成することもできますが、これが標準のJavaパッケージにまだ存在していない場合は非常に驚くでしょう。 。

何をお勧めしますか?

役に立ちましたか?

解決

<!> quot; the best <!> quot;かどうかはわかりませんが、ここに循環バイトバッファ

Java Utilities-OstermillerUtils クラスは GPLライセンス

  

この循環バイトバッファは、バイトの循環バッファプロデューサ/コンシューマモデルを実装します。バッファの充填と空化は、標準のJava InputStreamsおよびOutputStreamsで行われます。

     

このクラスを使用すると、PipedInputStreamおよびPipedOutputStreamを使用するよりも簡単な方法になります。
  PipedInputStreamsとPipedOutputStreamsは、マーク操作をサポートせず、使用するバッファーサイズを制御できません。また、2つのクラスをインスタンス化して接続する必要があるより複雑なAPIがあります。

他のヒント

これはうまく機能するのだろうか

https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

Apacheライセンスであるため、おそらくこれを試してみます。

同様の要件を持つプロジェクトでjava.util.ArrayDeque<Byte>を使用しています。 java.util.concurrent Queueを使用して実装を簡単に変更できることに注意してください。 実装。

このようなクラスを作成しました: ByteRingBuffer

自動的にはサイズ変更されませんが、resize()メソッドがあります。

<!> quot;よくテストされた<!> quot;乱数を使用してすべての可能な状況をテストする自動テストプログラムを使用します。

別の解決策は、 GrowablePipedOutputStream および GrowablePipedInputStream by JBoss。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top