[英]What is the best way to return big chunks of binary data from a webservice?
[英]What is the best ways to return a big file from jetty server?
我需要从Jetty服务器返回一个大文件,然后我在公司的源代码中建立了3种不同的方式来做到这一点。 我现在试图了解它们在性能,内存和时间方面的优缺点。
选项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:
基于: 在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);
}
如果还有其他/更好的选择,请分享。
选项A:
Path path = <FilePath>;
return path.toFile();
最容易写。 但是,这会导致整个文件在发送之前被加载到内存中吗?
没有。
还是码头流?
否。这只是返回一个File
对象。
选项B:
Path path = <FilePath>;
return new FileInputStream(path.toFile());
与选项A相比,将文件流传输到这里是否有任何效果?
是的,但没有用 。 它返回FileInputStream
,在连接的另一端没有任何用处。
选项C:
Path path = <FilePath>;
return new StreamingOutput() {
@Override
public void write(final OutputStream out) throws IOException {
copy(path, out);
}
};
需要这里的副本吗?
是。
与选项B相比,这是否多余?
否。这是否真正起作用完全取决于什么StreamingOutput
,您没有告诉我们。
选项D:基于:在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);
}
这是您提供的唯一出现的选项,它实际上似乎将任何内容从服务器复制到客户端。 还有其他方法可以完成此操作,但是返回File
或FileInputStream
并不是其中的任何一种。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.