java - HttpInputStream read() 方法失败

标签 java inputstream urlconnection

我使用以下代码从 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。

有人可以建议我,这段代码发生了什么吗?

请提供您的建议..

最佳答案

不保证网络服务器在 http header 中提供内容长度。因此你不应该依赖它。只需像这样读取流:

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();

关于java - HttpInputStream read() 方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404525/

相关文章:

java - Karaf OSGi 配置抛出 ResolutionException : Unable to resolve root: missing requirement [root] osgi. 身份;

java - 如何从包含文本 header 的套接字输入流中读取二进制文件? :

java - 返回空 inputStream 的 URLConnection

java - 下载 URL 内容超时

java - 无法获取 getResponseCode

java - 如何使用 java 在 Selenium WebDriver 项目中表示页面对象导航

java - 集合删除方法不提供并发修改异常

java - SQLJ VS JAVA 文件

java - 用 InputStream 包装 ByteBuffer

java - 输入流根据内容由不同的对象处理