我编写了简单的Java Downloader,我在速度方面遇到了一些问题。
首先,速度还可以 - 就像我使用浏览器下载此文件一样。但经过一段时间后,速度会下降很多,并且每两秒钟更换一次 - 从42kb / s到64kb / s,从64kb / s到42kb / s。
我的代码:
InputStream is = null;
FileOutputStream os = null;
os = new FileOutputStream(...);
URL u = new URL(...);
URLConnection uc = u.openConnection();
is = uc.getInputStream();
final byte[] buf = new byte[1024];
for(int count = is.read(buf);count != -1;count = is.read(buf)) {
os.write(buf, 0, count);
}
我应该怎样做才能最大限度地提高下载速度?
更新
文件大小从1到大约100MB不等。 我将缓冲区增加到65536,它是相同的。
关于测量:我每3秒检查写入多少字节,然后除以3和1024 - 它给我kb / s
答案 0 :(得分:5)
为了提高速度,最高可达带宽和服务器容量的限制,应用程序应使用多线程代码的多个连接(不止一个):每个线程创建自己的连接并查询文件的某些部分。
此类应用程序的一个示例是IBM download director,它通常使用三个HTTP连接来检索大文件。大多数FTP客户端也能够使用多个连接来提高吞吐量。在Java中,Apache HttpClient可用于编写这样的多线程应用程序。
您尚未详细说明网址中使用的协议。如果HTTP,HEAD
请求返回文件长度,GET
使用分块支持来查询文件部分。
如果直接使用HttpURLConnection并为ChunkedStreamingMode设置值,即使使用单个连接,也可以获得更好的性能。
如果仍然不满意,请提供其他详细信息: