将InputStream复制到OutputStream的更好方法

时间:2014-01-09 07:19:00

标签: java performance io nio apache-httpclient-4.x

是否有更好的方法将InputStream复制到OutputStream

我有一个输入流,比如HttpClient。我有另一个连接到servlet输出流的流。

要将数据从输入流复制到输出流,我使用apache IOUtils.copy方法,该方法使用临时缓冲区进行复制。

我想知道我是否使用ByteBuffer它会有助于提升绩效吗?

1 个答案:

答案 0 :(得分:1)

如果没有带流的缓冲区,除非你想一次复制一个字节,否则你无法逃脱,除非你知道堆栈中有缓冲流用于输入和输出,否则效率不高。

您不能将ByteBuffers与流一起使用。您可以将它们与频道一起使用,并且您可以从流中获取频道,但您所做的只是在流API上添加额外的图层。你最好直接面对它,如下所示。对于网络流,在任何情况下,性能都由网络主导,而不是代码。

while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

适用于大于零的所有buffer大小。我通常使用8192。