当前位置:编程学习 > JAVA >>

关于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的情况,但是貌似条件不够,只能帮顶了。 --------------------编程问答-------------------- 跟网速应该没有关系,网速很稳定。毕竟字节数相差本就不多 --------------------编程问答--------------------
引用 3 楼 wcl1598593 的回复:
跟网速应该没有关系,网速很稳定。毕竟字节数相差本就不多


不知道你打印语句在什么地方,在这里,第一现场,打印一下看看就知道了

while((n=is.read(buffer))!=-1){
    raf.write(buffer,0,n);
    pos+=n;
    System.out.println(pos);
} --------------------编程问答--------------------

这是第一现场的跟踪结果 --------------------编程问答--------------------
引用 5 楼 wcl1598593 的回复:
这是第一现场的跟踪结果

不对吧,这样的话每打印一次pos应该是增加n的,打印出来怎么没变呢 --------------------编程问答-------------------- 这就是让人郁闷的问题所在,而且假如现在停止程序,打开下载的文件显示是损坏的,所以可以确定的一点是:程序似乎还卡在 while()循环里,没有真正下载完 --------------------编程问答--------------------
引用 7 楼 wcl1598593 的回复:
这就是让人郁闷的问题所在,而且假如现在停止程序,打开下载的文件显示是损坏的,所以可以确定的一点是:程序似乎还卡在 while()循环里,没有真正下载完

不管卡不卡,每打印一次pos都是会增加的,还是先好好检查一下程序吧,调试一下看看 --------------------编程问答-------------------- 嗯,我再试试,谢啦,有问题再请教
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,