Ускоренная строка результатов HttpUrlConnection для Android

В настоящее время я разрабатываю приложение для Android и сталкиваюсь со следующей проблемой. Я делаю HTTP-запрос на сервер, который должен отправить мне содержимое XML, которое я затем разбираю. Я заметил повторяющиеся ошибки при анализе длинных строк XML, поэтому решил отобразить результат моих запросов и обнаружил, что строка (или поток?), Которую я получаю, случайным образом усекается. Иногда я получаю целую строку, иногда половину, а иногда и третью, и, похоже, она соответствует определенному шаблону в количестве усеченных символов, и я имею в виду, что иногда я получаю 320 символов после запроса, после чего после Затем 320, а затем снова 156 (это не фактические числа, а следуют шаблону).

Вот мой код для запроса и преобразования InputStream в строку:

private String downloadUrlGet(String myurl) throws IOException { InputStream is = null; // Only display the first 20000 characters of the retrieved // web page content. int len = 20000; try { URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000 /* milliseconds */); conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "application/xml"); // Starts the query conn.connect(); int response = conn.getResponseCode(); Log.d(DEBUG_TAG, "The response is: " + response); is = conn.getInputStream(); // Convert the InputStream into a string String contentAsString = readIt(is, len); return contentAsString; // Makes sure that the InputStream is closed after the app is // finished using it. } finally { if (is != null) { is.close(); } } } // Reads an InputStream and converts it to a String. private String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException { Reader reader = null; reader = new InputStreamReader(stream, "UTF-8"); char[] buffer = new char[len]; reader.read(buffer); return new String(buffer); } 

Длина XML, которую я пытаюсь получить, намного меньше, чем 20000. Я попытался использовать HttpURLConnection.setChunkedStreamingMode () с 0 и различными другими номерами в качестве параметра, но ничего не изменил.

Спасибо заранее за любые предложения.

Вы делаете обычную ошибку, полагая, что read() заполняет буфер. См. Javadoc. Он не обязан это делать. На самом деле не обязательно передавать более одного байта. Вы должны прочитать в цикле, пока не встретите конец потока ( read() возвращает -1).