我写了简单的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);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能最大限度地提高下载速度?
UPDATE
文件大小从1到大约100MB不等.我将缓冲区增加到65536,它是一样的.
关于测量:我每3秒检查写入多少字节,然后除以3和1024 - 它给我kb/s
为了提高速度,最高可达带宽和服务器容量的限制,应用程序应使用多线程代码的多个连接(不止一个):每个线程创建自己的连接并查询文件的某些部分.
这种应用程序的一个示例是IBM下载控制器,它经常使用三个HTTP连接来检索大文件.大多数FTP客户端也能够使用多个连接来提高吞吐量.在Java中,Apache HttpClient可用于编写这样的多线程应用程序.
您尚未详细说明URL中使用的协议.如果是HTTP,HEAD请求返回文件长度并且GET使用分块支持来查询文件部分.
如果直接使用HttpURLConnection并为ChunkedStreamingMode设置值,即使使用单个连接,也可以获得更好的性能.
如果仍不满意,请提供其他详细信息:
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |