Java 是否可以使用自定义序列化或外部化来序列化类的临时字段?

Java 是否可以使用自定义序列化或外部化来序列化类的临时字段?,java,serialization,deserialization,transient,Java,Serialization,Deserialization,Transient,是否可以使用自定义序列化或 使用外部化 示例:有一个类Person具有名称字段 transient String name; 是否可以使用以下方法对其进行序列化 private void writeObject(ObjectOutputStream out) throws IOException; private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException; 如果您使用的是自

是否可以使用自定义序列化或 使用外部化

示例:有一个类
Person
具有名称字段

transient String name;
是否可以使用以下方法对其进行序列化

private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;

如果您使用的是自定义序列化,那么答案是肯定的。当我们通过重写
writeObject
方法进行自定义序列化时,您可以控制序列化,并可以执行任何您想要的操作。因此,您还可以分配或使用
瞬态
字段的值,还可以将其与其他类属性一起整理。

您可以写入/读取任何字段,包括瞬态in-writeObject/readObject。但是,先用transient隐藏字段,然后用自定义序列化简单地写/读它,这没有多大意义。通常,临时字段根本不序列化,或者需要对自定义序列化进行一些特殊处理


至于外部化,它忽略了暂时性,所有字段都是显式写入/读取的。

那么,当您尝试这样做时会发生什么呢?序列化时不会出现异常,但在反序列化时会出现异常。您是否也重写了readObject?您能否解释自定义序列化与外部序列化(即可外部化)的区别?需要特殊处理的类序列化和反序列化过程中的处理必须实现具有这些精确签名的特殊方法:private void writeObject(java.io.ObjectOutputStream out)抛出IOException private void readObject(java.io.ObjectInputStream in)抛出IOException,ClassNotFoundException;私有void readObjectNodeData()抛出ObjectStreamException;这两本书我都读过。但是我不能理解。自定义序列化不是类似于外部化吗?因为在这篇文章中,我们正在编写自己的代码来序列化,而在早期版本的Java中,反射速度非常慢,因此序列化大型对象图(例如,在客户机-服务器RMI应用程序中)有点性能问题。为了处理这种情况,提供了java.io.Externalizable接口,它与java.io.Serializable类似,但具有自定义编写的机制来执行编组和解编组功能(您需要在类上实现readExternal和writeExternal方法)。这为您提供了绕过反射性能瓶颈的方法。writeObject和readObject方法序列化非序列化字段。但是,java中从不序列化瞬态变量。您能解释一下自定义序列化与外部序列化(即外部化)的区别吗?使用外部化,您可以自己保存/恢复所有数据,使用自定义序列化,您仍然可以使用defaultWriteObject/defaultReadObject,externalizable需要一个公共的无参数构造函数。。。