transient关键字作用

使用对象流保存对象时,将对象的全部信息都保存了,但是有些信息不希望被保存,比如密码,要用到transient。使用transient关键字修饰的属性,在保存对象时,该属性不会被保存。

 

package com.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class TransientDemo {

public static void main(String[] args) {
// TODO 自动生成的方法存根

ObjectOutputStream oos = null;
User user = new User("mr", "mrsoft");
try {
oos = new ObjectOutputStream(new BufferedOutputStream(
new FileOutputStream("ObjectData")));
oos.writeObject(user);
System.out.println("保存前对象:");
System.out.println("保存前对象用户名:" + user.getUsername());
System.out.println("保存前对象用密码:" + user.getPassword());
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}


ObjectInputStream ois=null;
try {
ois= new ObjectInputStream(new BufferedInputStream(
new FileInputStream("ObjectData")));
User user1=(User) ois.readObject();
System.out.println("保存后对象:");
System.out.println("保存后对象用户名:" + user1.getUsername());
System.out.println("保存后对象用密码:" + user1.getPassword());
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}

}

 

 

transient关键字用于修饰不需要序列化的域,如果一个引用类型被transient修饰,择期反序列化的结果是null。如果一个基本类型被transient修饰,择期发序列化的结果是0,如果域的引用类型是不可序列化的类,也应该使用transient修饰。

posted on 2016-02-19 22:19  1130136248  阅读(106)  评论(0)    收藏  举报

导航