大量のデータをバイナリ ファイルに書き込もうとしています。大量のデータであるため、これを高速に実行することが重要であり、データを 1 つずつ int として書き込めるようにしたいと考えています。RandomAccessFile
、などを試しましたがBufferedWriter
、DataOutputStream
それらはすべて遅すぎるか、int を書き込めません。私を助けるかもしれないアイデアはありますか?
3 に答える
int をバイトに変換する正しいコードを記述すれば、すべてのストリームで「int を書き込む」ことができます。
Java の 2 つの「高速」IO オプションは、NIO バッファのBufferedOutputStream
上にFileOutputStream
あり、それを使用します。FileChannel
書き込んでいるのが非常に多くのint
値だけである場合は、IntBuffer
インスタンスを使用してデータを に渡すことができますfileChannel
。
さらに、「一度に 1 つずつ」は一般に「高速」と互換性がありません。遅かれ早かれ、データはブロック単位でディスクに移動する必要があります。少量のデータを強制的にディスクに保存すると、プロセスが非常に遅くなることがわかります。たとえば、整数値をバッファーに追加し、バッファーがいっぱいになったときにバッファーに書き込み、それから繰り返すことができます。
java.nio
パッケージを見てみましょう。必要な目的に使用できるクラスが見つかります。
一度に 1 int ずつファイルに書き込むことは、本質的に高速な操作ではありません。bufferedwriter を使用しても、潜在的に多くの関数呼び出しを行っている可能性があります (バッファを十分な大きさに設定していない場合は、まだ多くのファイル書き込みを行っている可能性があります)。
整数を配列に入れ、ByteBuffer を使用してそれをバイト配列に変換し、そのバイト配列をファイルに書き込もうとしましたか?