У меня есть 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, и в то же время я загрузить файл вручную на рабочий стол, чтобы сравнить оба выхода вышеуказанного способа и исходный файл, что-то происходит, что я не могу понять:
- метод правильно считывает 5664 байта (информация из вызова Log.d (...)).
- Исходный файл имеет 5664 символов, что имеет смысл с первым фактом.
- Вывод вышеуказанного метода имеет длину всего 4254 символов!
Я думаю, что это может быть как-то связано с странных вопросов распорных, которые я не знаю, почему, но случаются, и это само собой разумеется, что я не имею ни малейшего представления о том, как остановить:
EDIT Добавлен фрагмент создания BufferedInputStream.
URL source = new URL(srcString);
URLConnection urlConnection = source.openConnection();
urlConnection.connect();
in = new BufferedInputStream(urlConnection.getInputStream());
Я не мог связать изображения в OP.How они отличаются? – Keerthivasan
Я не знаю, что вы подразумеваете под «OP». Есть два отличия: первый заключается в том, что вывод метода «показывает» маржу, которую я выделил в белом прямоугольнике, и, кроме того, результат короче (как я упоминал в сообщении, по какой-то причине он имеет 1.4k символов меньше, чем это должно). –
Я загрузил xml и запустил ваш код, но вывод такой же, как и входной, такой же длины и того же содержимого. Как создается BufferedInputStream на входе? – Aris2World