我知道什么是序列化及其使用原因,但我的问题是:
writeObject
,readObject
的潜在好处是什么,因为当我们进行序列化时,我们最终会覆盖这两种方法? readResolve
如何确保在反序列化期间创建的对象不是新对象。我知道下面的内容,它在反序列化过程中返回相同的对象,但谁将在内部调用此readResolve
方法?
private Object readResolve() throws java.io.ObjectStreamException {
return INSTANCE;
}
答案 0 :(得分:10)
FileInputStream
,它依赖于开放操作系统文件句柄,在反序列化对象时可能不再存在)。这种声明的现代方式是注释,但是在添加序列化时Java中不存在这些注释。Serializable
。this
)。无论此方法产生什么,都会返回到请求反序列化的代码。如果返回了一个预先存在的对象,那么任何人都不会看到由反序列化程序创建的新对象,最终会被垃圾回收。答案 1 :(得分:2)
标记接口用于告诉JVM执行特定任务。他们没有任何方法。 Serializable也是一个标记界面。
序列化是展平对象的过程。当您在类中实现可序列化接口时,它会告诉JVM序列化其对象,即它必须转换为流。