关于javaIO流read()方法读不尽的疑问
URL url=null;
url = new URL(address);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestProperty("RANGE", "bytes="+pos+"-");
InputStream is=conn.getInputStream();
File file=new File(dest);
RandomAccessFile raf=new RandomAccessFile(file, "rw");
raf.seek(pos);
int n=-1;
byte[] buffer=new byte[8*1024];//8K
//读不尽的情况
while((n=is.read(buffer))!=-1){
raf.write(buffer,0,n);
pos+=n;
}
if(pos==fileLength){
System.out.println(pos+"/"+fileLength+"(100%)");
}
if(is!=null){
is.close();
}
if(raf!=null){
raf.close();
}
程序功能就是下载指定链接的文件,下载的时候每次都是以接近10%的速度在下载,可是到了最后的99% 为什么连续走了三次才下载完,要知道我是每隔5s打印一次,这就是接近15s,百思不得其解,望大神解惑! java --------------------编程问答-------------------- 在测试一下看看不就知道了。。
网速不稳定是常有的事,下载文件的时候不也常有快又慢的时候么。。。 --------------------编程问答-------------------- 想重现LZ的情况,但是貌似条件不够,只能帮顶了。 --------------------编程问答-------------------- 跟网速应该没有关系,网速很稳定。毕竟字节数相差本就不多 --------------------编程问答--------------------
不知道你打印语句在什么地方,在这里,第一现场,打印一下看看就知道了
while((n=is.read(buffer))!=-1){
raf.write(buffer,0,n);
pos+=n;
System.out.println(pos);
} --------------------编程问答--------------------
这是第一现场的跟踪结果 --------------------编程问答--------------------
不对吧,这样的话每打印一次pos应该是增加n的,打印出来怎么没变呢 --------------------编程问答-------------------- 这就是让人郁闷的问题所在,而且假如现在停止程序,打开下载的文件显示是损坏的,所以可以确定的一点是:程序似乎还卡在 while()循环里,没有真正下载完 --------------------编程问答--------------------
不管卡不卡,每打印一次pos都是会增加的,还是先好好检查一下程序吧,调试一下看看 --------------------编程问答-------------------- 嗯,我再试试,谢啦,有问题再请教
补充:Java , Java SE