utStream(new FileOutputStream(
? ? ? ? ? ? ? ? new File("test")));
? ? ? ? out.writeObject(et);
? ? ? ? ObjectInput in = new ObjectInputStream(new FileInputStream(new File(
? ? ? ? ? ? ? ? "test")));
? ? ? ? et = (ExternalizableTest) in.readObject();
? ? ? ? System.out.println(et.content);
? ? ? ? out.close();
? ? ? ? in.close();
? ? }
}
content变量会被序列化吗?好吧,我把答案都输出来了,是的,运行结果就是:
是的,我将会被序列化,不管我是否被transient关键字修饰
这是为什么呢,不是说类的变量被transient关键字修饰以后将不能序列化了吗?
我们知道在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。因此第二个例子输出的是变量content初始化的内容,而不是null。