编写该多线程下载程序遇到的问题

       在写多线程下载程序的时候,也遇到了不少的问题,不过,有的解决了,有的没有解决,这里都附于下面,如果有愿意给答案的朋友,兄弟感激不尽:

1、请问如何用一个线程去监视已经在运行的线程是否已经结束?  

状态:解决

]解决方式:本人

解决答案:

在主程序中定义一个全局静态的boolean数组,每启动一个线程就把该数组对应的值设为false,然后运行完后,就把线程对应的数组设为true.
另外设一个监视进程,循环检测当前数组中的所有值都为true,如果是那就表示所有启动的线程已经结束,就可以做后面的工作了,如文件的合并.

2、我欲网络文件在大上,利用HttpURLConnection,可是我按下面的顺利写却报"已经连接"错误:
urlc = (HttpURLConnection) url.openConnection();
TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");
但如果我这样就不会出错,换一下第一句的位置:
urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");
TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
可是这样在断点续传的时候取得的总文件大小就只有现在需要时的大小,不能够满足程序的要求,因为我要计算文件是否已经下载完毕,于是我就把程序改成了这样,采用先断开再次连接,这样虽然可以达到要求,可是,这样先断开再次联接这势必造成资源的浪费,请问有什么好的方式?
urlc = (HttpURLConnection) url.openConnection();
urlc.disconnect();
urlc = (HttpURLConnection) url.openConnection();TotalSize=Long.parseLong(urlc.getHeaderField("Content-Length"));
urlc.setRequestProperty("RANGE", "bytes="+fileSize+"-");
urlc.setRequestProperty("Accept","image/gif,image/x-xbitmap,application/msword,*/*");

状态:未解决

3、将小数组的内容组合到大数组中,减少写硬盘的次数

写一个下载程序,可是,如果将希望减少写硬盘的次数,
有一个小的字节数组为1024,这样得到内容就去写硬盘,
都知道操作I/O是很费时间的,我这里想另个高一个大的字节数组,如果容量为50*1024,这样就可以明显的减少写硬盘的时间开销,可是这里如何更好的将小数组的内容合并到大数组中去呢,是每一次都循环吗,那如果我下载一个1024*1000即时的文件,那不是要循环:1024*1000次,这明显没有必要,请问有没有更简单的方法?


状态:未解决

如果有那位朋友愿意,本人非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值