2017-03-19 5 views
0

以下のようなコードに従っています。さまざまな実装を見てみると、ほとんどの人がバイトコピーを実行して同じ操作を実行しているようです。ファイルを膨張させてファイルに出力する処理を高速化する方法がありますか?ファイルのパフォーマンス向上のための出力の増加

public static String unzipString(InputStream in) { 
try { 
    int length = (int) in.readUBits(16); 
    // Add extra byte to array when Inflater is set to true 
    byte[] data = in.read(length); 

    ByteArrayInputStream bin = new ByteArrayInputStream(input); 
    InflaterInputStream in = new InflaterInputStream(bin); 
    FileoutputStream bout = new FileoutputStream(this.file); 
    int b; 
    while ((b = in.read()) != -1) { 
     bout.write(b); 
    } 
    bout.close(); 

} catch (IOException io) { 
    return null; 
} 

}

+1

コードが不自然に見えます。私はそれが今までコンパイルされるのだろうかと思う。 – glee8e

+0

私のコードではありません。それは私がGoogleから引っ張った例です。バイト単位の出力書込みを考えると、上記と同様です。私のファイルは大きく、圧縮された各ファイルが1600KBで非圧縮の場所が26MBである場所に書き込むためにファイルごとに2分かかるようです。バイトを書き込むOutputstreamは、テントの長いポールのようです。 – XanderLynn

+0

そのコードはひどいです。別の例を試してみてください。私はすでに崩壊した家を改善することはできません。 – glee8e

答えて

1

コピーは、一度に1つのバイトは常にファイルを処理するための非常に遅いの方法になるだろう。代わりに8 KBと言うバッファを使用することをお勧めします。ところで、それはより速くあなたがinをラップしますが、正確lengthバイトを読み込むのInputStreamとの最初の場所で[]バイトのコピーを避けることができようにするに

try (FileOutputStream fout = new FileOutputStream(this.file)) { 
    byte[] bytes = new byte[8192]; 
    for (int len; (len = in.read(bytes)) != -1;) 
     fout.write(b, 0, len); 
} 

関連する問題