java - 将InputStream复制到OutputStream的更好方法

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

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

我有一个由 HttpClient 提供的输入流。我有另一个连接到 servlet 输出流的流。

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

我想知道如果我使用 ByteBuffer 是否会对性能有所帮助?

最佳答案

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

您不能将ByteBuffers与流一起使用。您可以将它们与 channel 一起使用,也可以从流中获取 channel ,但您所做的只是在流 API 上添加额外的层。你最好直接面对它,如下所示。在网络流的情况下,无论如何,性能由网络决定,而不是由代码决定。

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

适用于所有大于零的缓冲区大小。我一般用8192。

关于java - 将InputStream复制到OutputStream的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013934/

相关文章:

java - 我可以使用 JComboBox 实现单词预测吗

performance - 用于查找许多集合中哪些是另一个集合的子集的算法/数据结构

c++ - 如何忽略 C++ 文件中的空格

c++ - 从 P6 PPM 文件读取字节到字符数组 (C++)

java - 多线程的 System.setErr() 的正确方法?

java - 捕获 C++ lambda 表达式错误中的 JNIENV*

java - Hibernate不生成带有注释的表

java - 在android中以表格形式排列sqlite表数据?

arrays - R中的动态类数组结构?

创建 4D 查找表