2014-01-19 2 views
0

У меня есть BufferedInputStream, который я хочу отлаживать. Для этой цели я использую этот метод (Log.d и Log.wtf только Android-конкретные инструменты протоколирования, кроме того, что поведение не должно отличаться от чистой Java):BufferedInputStream считывается до конца, но «отбрасывает»? data

public static final String toString(BufferedInputStream is) { 
    String ret = ""; 
    int readBytes = 0; 

    is.mark(Integer.MAX_VALUE); 

    if (is != null) { 
     Writer writer = new StringWriter(); 

     char[] buffer = new char[1024]; 
     try { 
      Reader reader = null; 
      try { 
       reader = new BufferedReader(
         new InputStreamReader(is, "UTF-8")); 
      } 
      catch (UnsupportedEncodingException e) { 
       Log.wtf("NX4", "Should never happen!", e); 
      } 
      int n; 
      while ((n = reader.read(buffer)) != -1) { 
       writer.write(buffer, 0, n); 
       readBytes += n; 
      } 
     } 
     catch (IOException e) { 
      Log.wtf("NX4", "Should never happen!", e); 
     } 
     finally { 
      try { 
       is.reset(); 
      } 
      catch (IOException e) { 
       Log.wtf("NX4", "Should never happen!", e); 
      } 
     } 
     ret = writer.toString(); 
    } 

    Log.d("NX4", "Read bytes: " + readBytes); 

    return ret; 
} 

Когда я бегу с, например, , this online XML file against which I'm testing right now, и в то же время я загрузить файл вручную на рабочий стол, чтобы сравнить оба выхода вышеуказанного способа и исходный файл, что-то происходит, что я не могу понять:

  1. метод правильно считывает 5664 байта (информация из вызова Log.d (...)).
  2. Исходный файл имеет 5664 символов, что имеет смысл с первым фактом.
  3. Вывод вышеуказанного метода имеет длину всего 4254 символов!

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

Comparison of the original file and the output of the method

EDIT Добавлен фрагмент создания BufferedInputStream.

URL source = new URL(srcString); 
    URLConnection urlConnection = source.openConnection(); 
    urlConnection.connect(); 
    in = new BufferedInputStream(urlConnection.getInputStream()); 
+1

Я не мог связать изображения в OP.How они отличаются? – Keerthivasan

+0

Я не знаю, что вы подразумеваете под «OP». Есть два отличия: первый заключается в том, что вывод метода «показывает» маржу, которую я выделил в белом прямоугольнике, и, кроме того, результат короче (как я упоминал в сообщении, по какой-то причине он имеет 1.4k символов меньше, чем это должно). –

+0

Я загрузил xml и запустил ваш код, но вывод такой же, как и входной, такой же длины и того же содержимого. Как создается BufferedInputStream на входе? – Aris2World

ответ

Смежные вопросы