我写了一个简单的下载器作为Java applet。在一些测试中,我发现我下载文件的方式甚至不如完美的一半。 Firefox的做法。
我的代码:
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);
}
有时我的applet工作正常,有时会发生意想不到的事情。例如。有时候,在下载applet的过程中会抛出一个IO异常或者暂时失去连接,而无法返回当前的下载并完成它。
我知道对于没有经验的Java程序员来说,真正先进的方法太复杂了,但也许您知道一些技术可以最大限度地降低出现这些问题的风险。
答案 0 :(得分:1)
所以你想恢复下载。
如果从URL读取时出现IOException,则表明连接存在问题。 有时候是这样的。现在你必须注意你已经下载了多少,并打开一个从那里开始的新连接。
要执行此操作,请在第二个上使用setRequestProperty()
,并为“我只想要以......开头的资源范围”发送正确的标题字段。请参阅HTTP 1.1规范中的section 14.35.2 Range Retrieval Requests。您应该检查响应中的标题字段,看看您是否真的回到了范围。