StackOverFlowError при десериализации объекта в Android - PullRequest
1 голос
/ 10 февраля 2012

Я пытался десериализовать объект, который был создан обычным JDK в приложении для Android, я получаю StackOverFlowError всякий раз, когда пытаюсь это сделать.

Могу ли я использовать объект, который я сериализовал, используя JDK в dvlik vm?размер файла составляет 4 МБ, и он хранится в папке ресурсов, строка, которая генерирует ошибку, выглядит следующим образом

trie = (Trie<String, String>) new ObjectInputStream( ctx.getAssets().open(FILE_NAME)).readObject(); 


02-10 15:27:41.036: E/AndroidRuntime(2019): FATAL EXCEPTION: main
02-10 15:27:41.036: E/AndroidRuntime(2019): java.lang.StackOverflowError
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:414)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.DataInputStream.readUTF(DataInputStream.java:433)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readNewString(ObjectInputStream.java:2171)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:918)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1291)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:518)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1535)
02-10 15:27:41.036: E/AndroidRuntime(2019):     at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1443)
....

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Просто предложение, почему бы вам не использовать KvmSerializable, он оптимизирован для Android Dalvik.

0 голосов
/ 10 февраля 2012

Я думаю, что лучше всего разбить файл на части, так как стек не способен обрабатывать что-либо более 32 КБ

0 голосов
/ 10 февраля 2012

Сериализация Java-объекта не подразумевается как формат обмена, не гарантируется работа над границами разных версий JVM (и davlik для androids совершенно разные) или изменения сигнатур классов.Если вы любите обмениваться данными, придерживайтесь какого-то портативного формата.

Один из вариантов будет xml (но довольно многословный), или вы также можете использовать JSON.Существует множество инструментов для привязки данных к этим форматам или из них.

(я также разработал один: https://github.com/ko5tik/jsonserializer)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...