Ошибка чтения метода HttpInputStream () - PullRequest
1 голос
/ 19 июня 2011

Я использую следующий код для загрузки файла с 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 () возвращает -1 перед чтением до размера (длины содержимого) загрузки.

Кто-нибудь может подсказать мне, что происходит с этим кодом ..

Просьба предоставить ваше предложение ..

1 Ответ

1 голос
/ 19 июня 2011

Не гарантируется, что веб-сервер предоставляет длину содержимого в заголовке 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();
...