特别是在ObjectInputStream的readUnshared()方法的上下文中,
“反向引用”是什么意思?
“反向引用”是什么意思?
我在这里遇到了这个词
If readUnshared is called to deserialize a back-reference (the stream representation of an object which has been written prevIoUsly to the stream),an ObjectStreamException will be thrown.
参考:https://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#readUnshared()
解决方法
使用ObjectOutputStream序列化对象时,流将“记住”它已写入的对象.当它必须再次写入同一个对象时,它不会再次写入整个对象,而是会写一个称为“后向引用”的标识符.
接收ObjectInputStream还将跟踪已接收的对象,并在读取后引用时返回它先前读取的相同对象.
如answer by CoronA中所述,这是 – 除其他外 – 用于序列化彼此指向的对象,还用于确保在序列化到另一个JVM时保留一个JVM中的标识相等性.
方法readUnshared(及其计数器部分writeUnshared)用于摆脱这种行为:它确保读取(写入)的对象将是唯一的(并且不会被重用作后向引用).这是相当先进的,我不记得曾见过或曾经使用过它,但话说回来,我很少看到序列化的使用.