私はJettyサーバーから大きなファイルを返す必要があり、私はそれを行うために私の会社のソースコードに3つの異なる方法を見つけました。私は今、彼らの賛否両論をパフォーマンスワイズ、記憶と時間を理解しようとしています。jettyサーバーから大きなファイルを返す最良の方法は何ですか?
オプションA:書くこと
Path path = <FilePath>;
return path.toFile();
最も簡単。しかし、ファイル全体がメモリにロードされてから送信されますか?または桟橋はそれを流すのですか?
オプションB:
Path path = <FilePath>;
return new FileInputStream(path.toFile());
はここにストリーミングするためのファイルを回しているオプションAと比較も効果がありますか?
オプションC:
Path path = <FilePath>;
return new StreamingOutput() {
@Override
public void write(final OutputStream out) throws IOException {
copy(path, out);
}
};
はコピーがここで必要ですか?オプションBと比較して冗長ではありませんか?基づいて
:
オプションD Streaming Large Files In a Java Servlet
Path path = <FilePath>;
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(path.toFile());
out = response.getOutputStream();
IOUtils.copy(in, out);
} finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
他/より良いオプションがある場合は、それらを共有してください。
もちろん、ここのコードは要求を処理する関数本体のスニペットです。 –
多分ここで読むことができます:https://stackoverflow.com/questions/55709/streaming-large-files-in-a-java-servlet – PeterMmm
@PeterMmm - ありがとうございます。しかし、それは全体を読み込む代わりにデータをストリーミングする必要性を説明していますデータをメモリに送信してから送信します。私がまだ混乱しているのは、Jettyが 'File'または' InputStream'を与えられたときに内部的に応答を処理する方法です。内部的にストリームを知っていますか? –