Java 什么';“这是为什么?”;“可序列化”;接口?
如果要序列化对象,只需执行以下实现:Java 什么';“这是为什么?”;“可序列化”;接口?,java,serialization,serializable,externalizable,Java,Serialization,Serializable,Externalizable,如果要序列化对象,只需执行以下实现: class MyClass implements Serializable { private static final long serialVersionUID = 12345L; } 而且不需要额外的努力就可以强制实现如何将对象写入和读取文件。Java只负责处理一切 另一方面,Externalizable确实定义了显式序列化和反序列化方法,因此我们可以强制编程 这就给我留下了一个问题:如果不需要为可序列化的付出额外的努力,那么让它成为我们必须实现
class MyClass implements Serializable
{
private static final long serialVersionUID = 12345L;
}
而且不需要额外的努力就可以强制实现如何将对象写入和读取文件。Java只负责处理一切
另一方面,Externalizable
确实定义了显式序列化和反序列化方法,因此我们可以强制编程
这就给我留下了一个问题:如果不需要为可序列化的
付出额外的努力
,那么让它成为我们必须实现的接口来序列化/反序列化对象的基本原理是什么,与默认情况下每个对象都可以序列化/反序列化不同?当程序员将一个类标记为可序列化时,他负责如果该类将来会更改,保存对象的程序将能够将它们读回更新的类。有关详细信息,请参见有效的Java项目74:明智地实现可序列化
还有另一个理由。您是否注意到
ObjectOutput.writeObject(objectobj)
接受对象,而不是可序列化的?这是因为它假定可以使用不同的序列化机制保存对象Serializable
意味着应该使用Java标准序列化保存对象接口Serializable仅用作标识的掩码
具有被序列化的能力,那么每个类都需要维护serialVersionUID以避免版本冲突。此外,它可能会导致安全问题:尽管有人会将其用作创建新对象的方式
对象不是由客户端代码创建的。使用可序列化接口不安全。有关详细信息,请参阅有效Java 因为:
如果您阅读Joshua Bloch的《高效Java》一书,它将解释使用内置功能有多么棘手。大多数开发人员在很多情况下都避免使用它。这个答案提供了一个很好的经验法则很好的问题。在Python中,默认情况下所有内容都是可序列化的。这里可以找到答案:您的意思是
ObjectOutput.writeObject()
或ObjectOutputStream.writeObject()
。我的意思是接口ObjectOutput,ObjectOutputStream。writeObject(Object)只接受序列化