利用完整的网络容量下载文件

时间:2013-05-22 15:06:23

标签: java

我正在提取数据,给定一个网址,并尝试了一些方法:How to download and save a file from Internet using Java?

我们的下载速度至少为2 MB / s,因此看到文件以56 KB / s的速度下载有点不舒服。使用浏览器,我们可以在几秒钟内获取50 MB文件,但使用上述方法需要几分钟。

如何利用我们快速连接的事实?我正在开发的应用程序远程获取数据以进行每日更新,数据通常在10-100 MB范围内,因此如果我们能够快速执行更新例程将会很好。

1 个答案:

答案 0 :(得分:5)

使用Java NIO(如下例所示):

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);

...导致我的下载时间为25秒 - Chrome完全在同一时间内(接近足够)。如果你在任何“普通”操作系统(Windows,Mac,Linux)上运行,那么上面将使用文件系统缓存,这意味着它应该与执行相同工作的“本机”应用程序一样快(因为它是,对我来说至少。)

请注意,使用简单的循环来复制字节(pre-nio方法)会慢得多,因为它没有使用缓存 - 所以一定要使用上面的方法来获得最快的速度

如果您使用上述方法看到截然不同的时间,那么我建议问题出在其他地方 - 例如外部限制Java流程的带宽(也许有一些奇怪的外部安全策略应该受到责备?)我当然不会当你看到上面的代码时,看到任何戏剧性的速度降低。