为什么要有transient关键字
在Java
中,transient
修饰的变量不会被序列化,即这些变量并不是序列化对象的一部分。
下面看个小例子:
class GalleryImage implements Serializable
{
private Image image;
//缩略图对象
private transient Image thumbnailImage;
private void generateThumbnail()
{
// 生成缩略图
}
//反序列化
private void readObject(ObjectInputStream inputStream)
throws IOException, ClassNotFoundException
{
inputStream.defaultReadObject();
generateThumbnail();
}
}
当GalleryImage对象序列化时,只有源图片image会发生序列化,缩略图thumbnailImage并不会序列化,这样可以节省对象占用空间(不一定恰当,这里只是提供个例子供大家理解为什么需要transient关键字)。
readObject
反序列化方法恢复序列化之前的状态,方法体内调用生成缩略图方法来恢复缩略图对象。
网友评论