IOUtils.copy and IOUtils.copyLarge are very slow
-
20-06-2021 - |
Pregunta
I've implemented a REST service for downloading a moderately large (250 Mb) zip file using IOUtils.copy(), similar to Most effective way to write file to servletoutputstream. The REST service is called from another app using HttpURLConnection. I use IOUtils.copy() on the receiving side to save the file to disk.
It takes over 30 minutes to download a file. This is way too slow.
Ideas? Better implementations?
Solución
I found the issue.
I was running both the client and the server on the same machine for testing. As soon as I moved one to a different machine, the transfer took a little over a minute.
Otros consejos
You can read the source code and see for yourself that the default buffer size is 4096.
I personally used 8192 as buffer size in a specific case.
Consider playing with the buffer size.
You can implement this copy quite easily on your own, or see the source file here, as a reference.
In addition, consider performing multi-threaded download, if possible as your server supports multiple connections (I assume).