2012-04-30 25 views
0

私は(response.getOutputStream用ディスクとのOutputStream上のPDFファイルの応答出力ストリーム速いJava入力出力ストリーム

private boolean copyStreamToStream(InputStream in, OutputStream target) { 

    logger.info("start copy file to stream"); 
    try { 

     byte[] buffer = new byte[1024 * 8]; 
     int len = in.read(buffer); 
     while (len != -1) { 
      target.write(buffer, 0, len); 
      len = in.read(buffer); 
     } 
     in.close(); 
     target.flush(); 
     target.close(); 
     logger.info("end copy file to stream"); 

    } catch (Exception ex) { 

     logger.error("Error: ", ex); 
     return false; 
    } 
    return true; 

} 

InputStreamを使用して、クライアントにコピーしたPDFファイルサーブレットを持っている)

問題は、PDFファイルが大きなファイルであり、クライアントに読み込むのに非常に長い時間がかかることです。スピードアップする方法はありますか?

+0

BufferedInputStreamを使用しましたか?これは、FileInputStreamから最初に行うことです。 –

+0

6つの質問のうち0の回答が受け入れられました...うーん、あなたはそれに取り組んでいるかもしれません。 – Thomas

+1

@dystroy BufferedInputStreamは、デフォルトで8 KBのバッファを使用します。 OPはすでに8KBのバッファを使用しています。 –

答えて

1

ダイレクトレスポンスオブジェクトとして戻すのではなく、ファイルをダウンロードして送信します。

// Set the headers. 
response.setContentType("application/x-download"); 
response.setHeader("Content-Disposition", "attachment; filename=" + filename); 

// Send the file for download. 
OutputStream out = response.getOutputStream(); 

が編集されました。

+0

それは 'ダウンロード用のファイル'を送信しません。それはファイル名を2回送信するだけです。 – EJP

+0

@EJPあなたが正しいです - 編集内容を参照 – Bitmap

+0

改訂はファイルがテキストであることを前提としています。 'InputStream'と' OutputStream'を使用する場合は、前提はありません。 – EJP

関連する問題