栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java套接字/序列化,对象不会更新

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java套接字/序列化,对象不会更新

请参阅

ObjectOutputStream.reset

重置将忽略任何已写入流的对象的状态。状态被重置为与new相同

ObjectOutputStream
。流中的当前点被标记为重置,因此相应的
ObjectInputStream
点将在同一点重置。先前写入流中的对象将不会被视为已经存在于流中。它们将再次写入流中。

output.reset();output.writeObject(...);

在写入同一对象之前,请调用reset以确保其更新状态被序列化。否则,它将仅使用对先前写入的对象及其过期状态的反向引用。

或者,你也可以使用

ObjectOutputStream.writeUnshared
以下方法。

将“非共享”对象写入

ObjectOutputStream
。此方法与相同
writeObject
,除了它始终将给定对象写为流中新的唯一对象(与指向先前序列化实例的反向引用相反)。

特别:

通过

writeUnshared
写入的对象始终以与新出现的对象(尚未写入流的对象)相同的方式进行序列化,而不管该对象先前是否已写入。

如果

writeObject
用于写入先前使用
writeUnshared
写入的对象,则将先前的
writeUnshared
操作视为对单独对象的写入。换句话说,
ObjectOutputStream
将永远不会产生对通过调用写入的对象数据的反向引用
writeUnshared

虽然通过写入对象

writeUnshared
本身并不能保证对对象进行反序列化时可以唯一引用该对象,但是它允许在流中多次定义单个对象,从而使
readUnshared
接收方进行的多次调用不会冲突。请注意,上述规则仅适用于用编写的基本级对象
writeUnshared
,不适用于要序列化的对象图中任何可传递引用的子对象。

output.writeUnshared(...);

请注意,与结合使用是一种好习惯

ObjectInputStream.readUnshared

从中读取一个“非共享”对象

ObjectInputStream
。此方法与readObject相同,不同之处在于,它防止后续调用
readObject
readUnshared
返回对通过此调用获得的反序列化实例的附加引用。

特别:

如果

readUnshared
调用来反序列化反向引用(先前已写入流的对象的流表示形式),
ObjectStreamException
则将抛出an
如果
readUnshared
成功返回,则随后对反序列化反序列化的流引用进行反序列化的任何尝试
readUnshared
ObjectStreamException
将引发。
通过反序列化对象
readUnshared
会使与返回的对象关联的流句柄无效。注意,这本身并不总是保证由返回的引用
readUnshared
是唯一的。反序列化的对象可以定义一个
readResolve
返回对其他方可见的对象的方法,或者
readUnshared
可以返回在流中其他位置或通过外部手段可获得的Class对象或enum常量。如果反序列化的对象定义了一个
readResolve
方法,并且对该方法的调用返回了一个数组,则
readUnshared
返回该数组的浅表副本;这保证了返回的数组对象是唯一的,并且无法通过调用
readObject
readUnshared
再次获得该数组对象。ObjectInputStream,即使底层数据流已被操纵。

obj = input.readUnshared();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号