Как решить OutOfMemoryError в Android Kotlin при чтении большого файла?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как решить OutOfMemoryError в Android Kotlin при чтении большого файла?

Сообщение Anonymous »

При попытке преобразовать данные, полученные из файла XML, хранящегося в списке, в массив байтов, я столкнулся с ошибкой. Может ли кто-нибудь дать рекомендации о том, как успешно преобразовать эти данные без ошибок?

Код: Выделить всё

    private fun convertFileToByteArray(file: File): ByteArray {
val inputStream = BufferedInputStream(FileInputStream(file))
val buffer = ByteArrayOutputStream()
val bufferSize = 1024
val tempBuffer = ByteArray(bufferSize)
var bytesRead: Int
try {
while (inputStream.read(tempBuffer, 0, bufferSize).also { bytesRead = it } != -1) {
buffer.write(tempBuffer, 0, bytesRead)
}
buffer.flush()
} catch (e: IOException) {
e.printStackTrace()
} finally {
inputStream.close()
}
return buffer.toByteArray()
}
ошибка:

Код: Выделить всё

Process: com.kader.testclient, PID: 23504
java.lang.OutOfMemoryError: Failed to allocate a 134217744 byte allocation with 25149440 free bytes and 124MB until OOM, target footprint 95582488, growth limit 201326592
at java.util.Arrays.copyOf(Arrays.java:3161)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
at com.kader.testclient.activities.DataManagerActivity.convertFileToByteArray(DataManagerActivity.kt:157)
at com.kader.testclient.activities.DataManagerActivity.sendXMLToSDCard(DataManagerActivity.kt:114)
at com.kader.testclient.activities.DataManagerActivity.onCreate$lambda$1(DataManagerActivity.kt:71)
at com.kader.testclient.activities.DataManagerActivity.$r8$lambda$kG6UQAIpGVwaMzA6MHqKPJlhIVs(Unknown Source:0)
at com.kader.testclient.activities.DataManagerActivity$$ExternalSyntheticLambda1.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1218)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Я увеличил размер буфера, но это не помогло.

Подробнее здесь: https://stackoverflow.com/questions/782 ... large-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»