0

さまざまな base64 エンコーダー mig64、iHarder、sun などをテストしました。変換のためにデータ全体をメモリに格納する必要があるようです。

1GB を超える大きなファイル (ストリーム) をマルチスレッド方式でエンコードする場合、ファイルを破損せずに使用できるコーデックの実装はどれですか? commons コーデックには base64outputstream ラッパーがあるようです。他の解決策はありますか?

明確にするために、1 TB のファイルがあり、このファイルは base64 でエンコードする必要があります。マシン メモリ 2 GB RAM、Java で最速の方法は何ですか?

4

1 に答える 1

1

どのエンコーダーがオフハンドで高速かはわかりません。それを判断するには、それぞれを測定する必要があります。ただし、メモリの問題を回避し、ファイルをチャンクに分割することで同時実行を実現できます。必ず 6 バイト境界で分割してください (Base64 では均等に 8 バイトになるため)。

適切なチャンク サイズを選択し、 を使用しExecutorServiceて固定数のスレッドを管理して処理を行うことをお勧めします。それらの間でa を共有RandomAccessFileし、適切な場所に書き込むことができます。もちろん、出力チャンク オフセットを計算する必要があります (8 を掛けて 6 で割ります)。

正直なところ、同時実行によるパフォーマンスの大幅な向上は実感できないかもしれません。ランダムアクセスでハードドライブを圧倒する可能性があります. 単一のスレッドを使用してファイルをチャンクアップすることから始めます。最初にそれがどれほど速いかを見てください。おそらく、1GB のファイルを思ったよりも速く処理できます。大まかな推測として、最新のハードウェアでは、読み取り元と同じドライブに書き込む場合でも 1 分と言えます。

于 2011-04-14T18:48:55.223 に答える