将File写入ServletOutputStream的最有效方法

IAd*_*ter 15 java performance servlets nio file

ServletOutputStream output = response.getOutputStream();
output.write(byte[]);
Run Code Online (Sandbox Code Playgroud)

将文件写入javax.servlet.ServletOutputStream的最有效方法是什么?

编辑:

如果使用NIO,这不会更有效吗?

Ale*_*exR 34

IOUtils.copy(in, out);
out.flush();
//...........
out.close(); // depends on your application
Run Code Online (Sandbox Code Playgroud)

哪里in的FileInputStreamoutSocketOutputStream. IOUtilsApache Commons中Commons IO模块的实用程序.

  • +1,但有两个注释 - 它是"apache commons",你可以使用`IOUtils.closeQuitely(..)` (6认同)

use*_*421 5

您有一个ServletOutputStream。您可以写的唯一方法是通过java.io. *。您根本无法在其上使用NIO(除了通过使用进行换行Channels,这毫无意义:它仍然是OutputStream底层,您只是在顶部添加了处理)。实际的I / O是受网络限制的,无论如何,您的写操作都会被servlet容器(以便它可以设置Content-Length)标头缓冲,因此在这里寻找性能调整是没有意义的。

  • @ 01:是的,如果您使用Channels.newChannel(OutputStream),则可以使用NIO的通道。将输出流包装在通道中。它仍在与基础ByteArrayOutputStream对话。在这种情况下不会提高效率。这是没有意义的。 (9认同)