我已经看到了很多代码,例如john-vasilef的(当前接受的)答案,这是一个紧张的循环,它从一个流中读取块并将它们写入另一流中。
我要提出的观点是反对不必要的代码重复,而赞成使用Apache的IOUtils。如果您已经在其他地方使用过它,或者如果您正在使用的另一个库或框架已经依赖于它,则这是一条已知且经过良好测试的行。
在以下代码中,我正在将对象从Amazon S3流传输到Servlet中的客户端。
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.io.IOUtils;
InputStream in = null;
OutputStream out = null;
try {
in = object.getObjectContent();
out = response.getOutputStream();
IOUtils.copy(in, out);
} finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
6行定义明确的模式,具有正确的流关闭效果,看起来非常可靠。