在反序列化android中的对象时出现StackOverFlowError

时间:2012-02-10 11:36:52

标签: android io

我一直在尝试反序列化由Android应用程序中的普通JDK创​​建的对象,每当我尝试这样做时,我得到一个StackOverFlowError。

我可以使用davlik vm中使用JDK序列化的对象吗?文件大小为4 MB并存储在assets文件夹中,生成错误的行如下

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 个答案:

答案 0 :(得分:1)

只是一个建议,为什么不使用KvmSerializable,它针对android dalvik进行了优化。

答案 1 :(得分:0)

Java对象的serrialisation并不是指交换格式,它无法保证工作 超过不同JVM版本的边界(和android davlik完全不同)或类签名更改。如果您想交换数据,请坚持使用一些便携式格式。

一个选项是xml(但非常详细),或者您也可以使用JSON。有很多工具可以提供与这些格式之间的数据绑定。

(我还开发了一个:https://github.com/ko5tik/jsonserializer

答案 2 :(得分:0)

我认为最好将文件拆分成碎片,因为堆栈无法处理超过32k的任何内容。