2009-09-04 13 views
3

ファイルからHttpServletResponseの本文にテキストをコピーするには、非常に速い方法が必要です。ファイルからHttpServletResponseにテキストをコピーする最も速い方法

実際、私はbuffereredReaderからresponse.getWriter()にループで1バイトずつコピーしていますが、もっと速く、より簡単な方法で実行する必要があります。

ありがとうございます!

+0

を使用することができます。次に、一度に数バイトずつ読み込み、それにかかる時間を比較してみます。 –

+0

このアプローチ(バイト単位でのコピー)は確かに受け入れられるものですか?私はできるだけゆっくりとしていると思った! –

+0

私はジェームズが欠かすことのできないアドバイスを繰り返していると思います。「測定し、最適化してから、もう一度測定してください」 –

答えて

5

サイズを微調整してパフォーマンスを変更できるので、バイト配列を受け入れるread()メソッドを使うのが好きです。

これは私が4Kバッファーと私のサーブレットでそれを行う方法です
public static void copy(InputStream is, OutputStream os) throws IOException { 
     byte buffer[] = new byte[8192]; 
     int bytesRead; 

     BufferedInputStream bis = new BufferedInputStream(is); 
     while ((bytesRead = bis.read(buffer)) != -1) { 
       os.write(buffer, 0, bytesRead); 
     } 
     is.close(); 
     os.flush(); 
     os.close(); 
} 
2

// Send the file. 
    OutputStream out = response.getOutputStream(); 
    BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); 
    byte[] buf = new byte[4 * 1024]; // 4K buffer 
    int bytesRead; 
    while ((bytesRead = is.read(buf)) != -1) { 
     out.write(buf, 0, bytesRead); 
    } 
    is.close(); 
    out.flush(); 
    out.close(); 
4

このようなものを自分で行う必要はありません。オープンソース、バトルテスト、最適化されたソリューションが存在することは、共通の要件です。

Apache Commons IOには、さまざまな静的コピー方式のIOUtilsクラスがあります。おそらく、あなたはあなたの実装をテストするためのユニットテストを書き、それにかかる時間のためにいくつかの数字を取得したいことがあり

IOUtils.copy(reader, writer); 

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.Writer)

+0

スティーブさん、ありがとうございました。私はそれが素晴らしい解決策だと確信していますが、私は最小限の外部参照を維持しようとしています。 –

関連する問題