私のアプリケーションはビデオファイルとi2cセンサーデータをできるだけ早くディスクファイルに記録しています。現在、私はすべてをバイトに変換しています。私はBufferedOutputStreamを使って記述しています。 @SiguzaはGzIPOutputStreamを検索してその行為を達成することを示唆するほど親切でした。私は、あなたがパフォーマンス上の問題について何か考えを持っていたのかどうか疑問に思っていました...私はプロセッサが先を見越してディスク書き込みがボトルネックだと思っています - 書き込みが起こる前にGZIPOutputStream良い戦略。これについてのどんな考えも大歓迎です。GZIPOutputStreamとBufferedOutputStreamのパフォーマンス
追加:コメントへの応答で...
はビュン判明高価なそのプロセッサではありません...とアーウィンが正しく指摘したように、私は元の質問をしていた方法は、素晴らしいではありませんでした。圧縮パフォーマンスに関する質問はBufferedOutputStreamとGZIPOutputStreamの間ではありません...圧縮ストリームと圧縮ストリームの両方をBufferedOutputStreamにラップする必要がありますが、オリジナルのFileOutputStreamがGZIPOutputStreamに先立ってラップされている場合は、どれだけのコストが追加されますBufferedOutputStreamにラップされます。ここに答えがあります。 21msで偽= zip形式のファイルサイズ4メガバイト
- - ファイルサイズ4キロバイト
と、私は私の2012年のMacProのラップトップは
38msで真= zip形式のと1Mのintの書き込みを行うコード
byte[] bs = RHUtilities.toByteArray((int)1);
boolean zipped = false;
FileOutputStream fos = new FileOutputStream(datFile);
BufferedOutputStream bos = null;
if (zipped) {
GZIPOutputStream gz = new GZIPOutputStream(fos);
bos = new BufferedOutputStream(gz);
} else
bos = new BufferedOutputStream(fos);
long startT = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
bos.write(bs);
bos.flush();
System.out.println(System.currentTimeMillis()-startT);
bos.close();
を使用していますはい、私は
読み取りもパフォーマンスが
FileInputStream fin = new FileInputStream(datFile);
0123との間に86ms対ほぼ同じ83です:-)圧縮が好き
と
GZIPInputStream gin = new GZIPInputStream(new FileInputStream(datFile));
いいすべて...
を読みますか?とにかくBufferedOutputStreamとGZIPOutputStreamは全く異なる獣であり、組み合わせることができます。前者は小さな書き込みが多い場合は最適化し、後者は圧縮可能なデータの領域消費を削減し、特殊なビデオコーデックを使用してビデオを圧縮する方がはるかに優れています。彼らは匹敵しない。 –
ファイルが圧縮されているかどうかにかかわらず質問が発生します。ダウンストリームシステムはそれらを圧縮解除できますか? – EJP
私はビデオストリームを圧縮していません。ヘッドアップディスプレイに入る情報や、ストリーム上にオーバーレイされて、それを増強する情報のように、ビデオストリーム自体を圧縮しているわけではありません。データはすべてバイト、整数、文字列です。各レコードは約20バイトです。 10fpsで10分はテキストとして400kB、重要なバイトに縮小すると120kBです。縮小して圧縮した場合は26kBです。帯域幅の節約は間違いなくすばらしく見えますが、パフォーマンスを最適に最適化する方法についての質問は私にはあまり明確ではありません。これは時間が重要ではないので、減圧工程は私の大きな心配ではありません。 –