java.lang.OutOfMemoryError: Не удалось выделить 267911176 байт с 4194304 свободными байтами и 125 МБ до OOM - PullRequest
0 голосов
/ 25 августа 2018

У меня есть этот код для чтения данных из XML-файла, написанного на Kotlin

    val _is = resources.openRawResource(+R.xml.data)
    val reader = BufferedReader(InputStreamReader(_is))
    val data = StringBuffer()
    val line = reader.readLine()
    while (line != null) {
        data.append(line!! + "\n")
        //Log.d("aa",line.toString())
    }
    val resourceData = (data.toString())

Данные XML-файла содержат

<questions>

    <question>aaa</question>
    <question>bbb</question>
    <question>ccc</question>


</questions>

и я всегда получаю данные wrond, а также было это исключение, в чем проблема?

1 Ответ

0 голосов
/ 25 августа 2018

Вы, кажется, читаете одну и ту же строку снова и снова.Поскольку цикл никогда не закончится, в конечном итоге вам не хватит памяти и вылетит программа.

val line = reader.readLine()     // 1
while (line != null) {           // 2
    data.append(line!! + "\n")   // 3
}

1 - Попросите читателя прочитать следующую строку данных в line

2- Если строка не нулевая, продолжайте движение

3 - Добавьте строку к данным.Перейдите к шагу 2.

В конце цикла вам нужно прочитать следующую строку, чтобы цикл while мог оценить его на ноль.Вам также нужно сделать line a var, чтобы вы могли изменить его.

var line = reader.readLine()       // <-- Change val to var
while (line != null) {           
    data.append(line!! + "\n")   
    line = reader.readLine()       // <-- Add this
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...