IOUtils.copy和IOUtils.copyLarge非常慢

时间:2012-07-13 20:28:54

标签: java http inputstream apache-commons-io

我已经实现了一个REST服务,用于使用IOUtils.copy()下载一个中等大小(250 Mb)的zip文件,类似于Most effective way to write file to servletoutputstream。使用HttpURLConnection从另一个应用程序调用REST服务。我在接收端使用IOUtils.copy()将文件保存到磁盘。

下载文件需要30多分钟。这方式太慢了。

想法?更好的实施?

2 个答案:

答案 0 :(得分:3)

我发现了这个问题。

我在同一台机器上运行客户端和服务器进行测试。一旦我将一台机器移到另一台机器上,转移就花了一分多钟。

答案 1 :(得分:0)

您可以阅读源代码并亲自查看默认缓冲区大小为4096 我个人在特定情况下使用8192作为缓冲区大小。
考虑使用缓冲区大小。
您可以自己轻松地实现此副本,或者查看源文件here作为参考。

另外,考虑执行多线程下载,如果可能,因为您的服务器支持多个连接(我假设)。