为什么要将类标记为可序列化?

akj*_*ain 8 java serialization

如果在stackoverflow上已经发布了类似的问题,请发布链接.

对于要序列化的对象,需要实现Serializable接口(没有方法)是什么?Java API说 - - 如果没有实现,那么它将抛出java.io.NotSerializableException.

这是因为ObjectOutputStream.java中有以下代码

............................

writeObject0(Object obj, boolean unshared){
.............
 } else if (cl.isArray()) {
        writeArray(obj, desc, unshared);
        } else if (obj instanceof Serializable) {
        writeOrdinaryObject(obj, desc, unshared);
        } else {
        throw new NotSerializableException(cl.getName());
        }
................
Run Code Online (Sandbox Code Playgroud)

但我的问题是为什么它必须实现Serializable,从而通知或告诉Java/JVM一个类可以被序列化.(它只是为了避免例外吗?).

在这种情况下,如果我们编写一个类似的功能,它将对象写入流而不检查实例中的类是否可序列化,那么类的对象是否会实现Serializable序列化?

任何帮助表示赞赏.

Bri*_*new 5

这是一个很好的问题.Serializable被称为标记接口,可以被视为类的标记,以将其标识为具有功能或行为.例如,您可以使用它来标识要序列化的类,这些类没有定义serialVersionUid(这可能是一个错误).

请注意,常用的序列化库XStream(和其他)不需要定义Serializable.