“你好,阿米戈!我要告诉你有关序列化的更多细节。
假设我们的类包含对某个 InputStream 的引用。那么就无法对其进行序列化,对吗?
"是的。你亲口说过,流无法序列化。而且,无法序列化包含不可序列化数据的对象。”
"是的。就是这样。但是,如果类所存储的数据在其状态中未扮演重要角色,却阻止该类被视为可序列化的类,该怎么办?没关系,类可能会存储无用内容。它可以随时甚至永久抛弃此数据。”
对于这些情况,Java 创建者给出了 transient 关键字。如果将此关键字写在成员变量之前,则该变量在序列化期间将被忽略。其状态不会被保存或重构。就像它不存在一样。这正好针对我们刚才考虑的情况。
还记得缓存和 volatile 修饰符吗?任何规则都有例外。
下面就是这样一个示例:
“cat”示例包含将被序列化忽略的变量:
代码
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION