我正在获取数据,给定了一个URL,并尝试了这里描述的两个方法:How to download and save a file from Internet using Java?
我们的下载速度至少是2MB/s,所以看到文件下载速度看起来像56KB/s有点不舒服。使用浏览器,我们可以在几秒钟内抓取一个50MB的文件,但使用上面描述的方法需要几分钟。
我如何利用我们有一个快速连接的事实?我正在开发的应用程序远程获取每日更新的数据,并且数据通常在10-100MB范围内,所以如果我们可以快速执行更新例程,那就太好了。
发布于 2013-05-22 23:18:29
URL website = new URL("http://cachefly.cachefly.net/100mb.test");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("test.test");
long x = System.currentTimeMillis();
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
System.out.println(System.currentTimeMillis()-x);我下载...results的时间是25秒-- Chrome也花了(差不多)同样的时间。如果你在任何“普通”操作系统(Windows、Mac、Linux)上运行,那么上面的应用程序将使用文件系统缓存,这意味着它应该与执行相同作业的“本机”应用程序一样快(至少对我来说是这样)。
请注意,使用简单的循环来复制字节( pre-nio方法)会慢得多,因为它不使用缓存-所以一定要使用上面的方法来获得最快的速度。
如果您在使用上面的方法时看到了截然不同的情况,那么我建议问题出在其他地方--例如,外部限制了Java进程的带宽(也许这要归咎于一些奇怪的外部安全策略?)我当然没有看到任何明显的速度下降,正如您在上面的代码中看到的那样。
https://stackoverflow.com/questions/16695347
复制相似问题