Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 序列化可以实现定制,那么为什么外部化呢?_Java_Serialization_Serializable_Externalizable - Fatal编程技术网

Java 序列化可以实现定制,那么为什么外部化呢?

Java 序列化可以实现定制,那么为什么外部化呢?,java,serialization,serializable,externalizable,Java,Serialization,Serializable,Externalizable,我已经阅读了上的这些文章,所以: , 但我的问题是,与可序列化相比,通过实现可外部化可以产生哪些额外的定制 通过给出我们自己的writeObject和readObject实现Serializable,可以自定义实现可序列化的类的序列化。那么使用Externalizable和自定义ReadExternal和writeExternal实现的目的是什么呢。使用Externalizable的真正好处是什么。我读过很多链接,上面说Externalizable支持自定义序列化(包括上面的一个)。但是我没有

我已经阅读了
上的这些文章,所以

,

但我的问题是,与
可序列化
相比,通过实现
可外部化
可以产生哪些额外的定制

通过给出我们自己的
writeObject
readObject
实现
Serializable
,可以自定义实现
可序列化的
类的
序列化
。那么使用
Externalizable
和自定义
ReadExternal
writeExternal
实现的目的是什么呢。使用
Externalizable
的真正好处是什么。我读过很多链接,上面说
Externalizable
支持自定义
序列化
(包括上面的一个)。但是我没有看到一个例子,其中
Externalizable
是一个明显的赢家,或者是使用
Serializable
无法做到的事情。很高兴看到一个例子

为了更加清晰,以下代码片段摘自:

实现
可序列化接口
时,它向
JVM
提供信息,说明这些
类的
实例
可以序列化。除此之外,还有一个关于
JVM

“在实现Serializable的类中查找以下两个方法。如果找到,请调用该方法并继续序列化过程,否则直接遵循标准序列化协议”

因此,这给了我们一个编写这两种方法的机会:

private void writeObject(ObjectOutputStream out)抛出IOException,,
private void readObject(ObjectInputStream in)抛出IOException、ClassNotFoundException


在实现
Serializable
中,您可以获得一个到
序列化
过程的钩子。您可以在这两个方法中编写自定义代码,并自定义
序列化的标准行为

可序列化和可外部化之间的主要区别在于可序列化自动为您处理基类。Externalizable将整个工作留给您