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

来源:互联网 发布:码工助手和疯狂美工 编辑:程序博客网 时间:2024/04/29 07:19

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

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次,这明显没有必要,请问有没有更简单的方法?


状态:未解决

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