1

我使用以下代码从 URL 下载文件..

while(status==Status.DOWNLOADING){
  HttpURLConnection conn=(HttpURLConnection)url.openConnection();
  conn.connect();
  int size=conn.getContentLength();
  BufferedInputStream bin=new BufferedInputStream(conn.getInputStream());
  byte[] buffer=new byte[1024];
  int read=bin.read(buffer);
  if(read==-1)
    break; 
  downloaded+=read;
}

对于某些 URL 的 read() 方法,在读取下载的大小(内容长度)之前返回 -1 ..

任何人都可以建议我,这段代码发生了什么..

请提供您的建议..

4

1 回答 1

1

它不能保证网络服务器在 http 标头中提供内容长度。因此,您不应该依赖它。只需像这样阅读流:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = bin.read(buf)) > 0) {
    bos.write(buf, 0, len);
}
byte[] data = bos.toByteArray();
于 2011-06-19T19:50:29.717 回答