1

我们使用 Protostuff 的 RuntimeSchema 来序列化我们的数据。这主要是有效的,但我们有时会得到:

java.lang.StackOverflowError
at io.protostuff.runtime.ObjectSchema.mergeFrom(ObjectSchema.java:350) ~[protostuff-runtime-1.5.3.jar:1.5.3]
at io.protostuff.CodedInput.mergeObjectEncodedAsGroup(CodedInput.java:336) ~[protostuff-core-1.5.3.jar:1.5.3]
at io.protostuff.CodedInput.mergeObject(CodedInput.java:298) ~[protostuff-core-1.5.3.jar:1.5.3]
at io.protostuff.runtime.RuntimeUnsafeFieldFactory$15$1.mergeFrom(RuntimeUnsafeFieldFactory.java:1217) ~[protostuff-runtime-1.5.3.jar:1.5.3]

这显然意味着我们的对象内部有某种循环引用。
阅读文档 Protostuff 理论上确实支持运行时模式中的循环引用,是否需要启用配置才能使其正常工作?

我读过:Dprotostuff.runtime.collection_schema_on_repeated_fields但它假设仅适用于数组项的循环引用,而我们的对象并非如此。

谢谢!

4

1 回答 1

1

Protostuff 支持多种编码格式(protobuf,json和它自己的graph)。

如果您的对象包含循环引用,那么只有一个是合适的 - graph。您可以将它与io.protostuff.GraphIOUtil.

请注意,其他编码 ( json, protobuf) 不支持循环引用(它需要将附加信息包含在序列化形式中,这在此处实际上是不可能的)。

可以在此处找到有关此主题的一些其他信息:http: //www.protostuff.io/documentation/object-graphs/

于 2017-07-11T21:51:22.450 回答