2014-01-09 2 views
1

Привет, я использую HttpURLConnection, который получает содержимое файла txt, и я хочу знать размер этого файла, и я использую метод длины контента, но он возвращает неверное значение, например, в этом коде. Размер файла 17509, но он возвращает 5147? поэтому любая помощь? Большое спасибо заранее.Метод запроса GET возвращает неверную длину содержимого

new Thread() { 
          @Override 
          public void run() { 
           String path = parser.getValue(e, "txt"); 
           URL u = null; 
           try { 
            u = new URL(path); 
            HttpURLConnection c = (HttpURLConnection) u 
              .openConnection(); 
            c.setRequestMethod("GET"); 
            c.connect(); 
            int lenghtOfFile = c.getContentLength(); 
            InputStream in = c.getInputStream(); 
            final ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
            byte[] buffer = new byte[1024]; 
            long total = 0; 
            Log.i("p1",""+lenghtOfFile); 
            while ((count = in.read(buffer)) != -1) { 
             total += count; 
             Log.i("p2",""+total); 
             bo.write(buffer, 0, count); 
            } 
            bo.close(); 

           } catch (MalformedURLException e) { 
            e.printStackTrace(); 
           } catch (ProtocolException e) { 
            e.printStackTrace(); 
           } catch (IOException e) { 
            e.printStackTrace(); 
           } 

          } 
         }.start(); 

ответ

1

Длина контента - это заголовок, заданный сервером. Я бы проверял, чтобы ваш сервер возвращал правильную длину контента. Вы можете сделать это с помощью cUrl:

curl -v http://path/to/file.txt 

Это должно показать вам заголовки, которые были отправлены и возвращены.

+0

Спасибо за ответ http-путь http://mrsoft.weab.eu/chagvalagar/topic1.txt – Mahfa

1

Быстрое обходное решение, о котором я могу думать, просто игнорирует поток содержимого и чтение входного потока, пока не осталось ничего, что можно было бы прочитать.

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(8192); 
int read = inputStream.read(); 

while (read != -1) { 
    byteArrayOutputStream.write((byte) read); 
    read = inputStream.read(); 
} 

byteArrayOutputStream.flush(); 
buf = byteArrayOutputStream.toByteArray(); 
Смежные вопросы