2012-02-10 3 views
1

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

Могу ли я использовать объект, который я сериализовал, используя JDK в davlik 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) 
.... 
+0

4 MiB довольно много для стека ... Вы пытались присвоить больше памяти виртуальной машине Java? – m0skit0

+0

@ m0skit0 Я запускаю это прямо на телефоне – OKAN

ответ

1

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

0

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

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

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

0

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

Смежные вопросы