我正在获取数据,给定一个URL,并尝试了这里描述的几个方法:如何使用Java从Internet下载和保存文件?
我们的下载速度至少为2 MB/s,因此看到文件以56 KB/s的速度下载有点不舒服.使用浏览器,我们可以在几秒钟内获取50 MB文件,但使用上述方法需要几分钟.
我怎样才能利用我们快速连接的事实?我正在开发的应用程序远程获取数据以进行每日更新,并且数据通常在10-100 MB范围内,因此如果我们能够快速执行更新例程将会很好.
使用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);
Run Code Online (Sandbox Code Playgroud)
...导致我的下载时间为25秒 - Chrome完全在同一时间内(接近足够).如果你在任何"普通"操作系统(Windows,Mac,Linux)上运行,那么上面将使用文件系统缓存,这意味着它应该与执行相同工作的"本机"应用程序一样快(因为它是,对我来说至少.)
请注意,使用简单的循环来复制字节(pre-nio方法)会慢得多,因为它没有使用缓存 - 所以一定要使用上面的方法来获得最快的速度.
如果您使用上述方法看到截然不同的时间,那么我建议问题出在其他地方 - 例如外部限制Java流程的带宽(可能有一些奇怪的外部安全策略应该责备?)我当然看不到任何戏剧性的速度降低,因为你在这里看到上面的代码.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |