【发布时间】:2012-11-24 13:40:05
【问题描述】:
我想用这个方法序列化一个对象:
public void serializ(CRDT m) throws IOException {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
ObjectOutputStream stream = new ObjectOutputStream(byteOutput);
stream.writeObject(m);
sumMemory = byteOutput.size();
stream.flush();
stream.close();
byteOutput.flush();
byteOutput.close();
}
我有一个例外java.lang.StackOverflowError
Exception in thread "main" java.lang.StackOverflowError
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1169)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
...
我阅读了一些论坛,我需要重新实现 writeObject / readObject 方法。
这是唯一可能的解决方案吗?以及如何重新实现writeObject / readObject
我要序列化的对象是: http://pastebin.com/D1kEidtn
导致错误的两个类是: pastebin.com/Sb3X0Quq 和 enter link description here
【问题讨论】:
-
如果您可以发布您想要序列化的对象的代码将会很有帮助。我建议使用 BufferedOutputStream。
-
向我们展示
myObject类。 -
由于
CRDT是abstract我们还需要具体类的代码。 -
@Mehdi:如果您无法发布具体类的代码,那么您应该尝试将代码剥离到相关部分。当然,如果您能提供给我们一个SSCCE 的例子,那就最好不过了。
-
只要打印出导致问题的对象的类,然后分析该类的代码。很有可能,您自己会发现问题。
标签: java serialization stack-overflow