2012-02-10 39 views
1

我一直在試圖反序列化一個由android應用程序中的普通JDK創​​建的對象,每當我嘗試這樣做時,我都會收到一個StackOverFlowError。當在android中反序列化一個對象時出現StackOverFlowError

我可以使用在davlik vm中使用JDK序列化的對象嗎?文件大小爲4 MB及其存儲在資產文件夾,產生錯誤的行是以下

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 VM? – m0skit0 2012-02-10 11:39:26

+0

@ m0skit0我直接在手機上運行它 – OKAN 2012-02-10 11:42:12

回答

1

只是一個建議,爲什麼不使用KvmSerializable它是Android的Dalvik優化。

0

Java對象serrialisation不是交換格式,它不是在不同的JVM版本的邊界上工作(和android的davlik是完全不同的)或類簽名更改的工作 。如果你想交換數據,堅持一些便攜式格式。

一個選項是XML(但相當詳細),或者你也可以使用JSON。有很多工具可以爲這些格式提供數據綁定。

(我還開發了一個:https://github.com/ko5tik/jsonserializer

0

我認爲最好的,你打破了文件成片,因爲堆棧不能夠處理任何超過32K以上。

相關問題