我有一个简单的数据结构,它被序列化和反序列化。 反序列化后,我希望数据结构本身进行后续处理步骤。在我们的例子中,它应该简单地对其包含的所有字符串调用 String.intern()。
先发制人地回答不相关的问题:
为什么不在正常反序列化对象后简单地执行此操作?
- 这个对象在很多地方被序列化/反序列化
- 此数据结构是已序列化/反序列化的较大对象的一部分,因此您还必须在反序列化后浏览任何封装对象
- 使用该框架的其他开发人员可能不知道或忘记了这一步,这会导致大量的漏洞
- 会很丑
为什么首先使用 String.intern()?
出于性能原因。我们进行大量文本处理和计算需要这样做。
换句话说,在:
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
有没有办法在里面调用默认/标准的反序列化? (这样我们就可以在之后添加我们的小步骤)
谢谢!
阿诺
最佳答案
是 - in.defaultReadObject()
。
但是你必须使用 readObject(..)
而不是 readExternal(..
)
请注意,如果您使用 Externalizable
,您就得靠自己了。您可以使用 Serializable
并自定义部分输出。
关于java - 在自定义反序列化中调用标准反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820670/