transient关键字作用
用java这么久,发现竟然不知道transient关键字的作用
总的来说:transient修饰的关键字不会被序列化
一、序列化和反序列化
名词解释
- 序列化:把
java对象写入到I/O流 ,即把java对象转换为字节序列,并将字节序列保存在磁盘上,或通过网络传输 - 反序列化:从
I/O流中恢复对象,即把得到的字节序列恢复成java对象
序列化的方法
实现序列化有两种方法:实现Serializable接口或Externalizable接口
二、transient的作用
- 一旦变量被
transient修饰,变量不再是对象持久化的一部分,该变量在反序列化后也无法获得 transient关键字只能修饰变量,不能修饰方法和类- 一个静态变量不管是否被
transient修饰,均不能被序列化
举个例子,User类序列化,password使用transient修饰,代码如下:
public class TransientTest {public static void main(String[] args) {User user = new User();user.setUsername("zhangsan");user.setPassword("123");System.out.println("---------序列化前读取---------");System.out.println(user.toString());try {ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("C:/a.txt"));out.writeObject(user);out.close();} catch (Exception e) {e.printStackTrace();}try {ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:/a.txt"));user = (User) in.readObject();in.close();} catch (Exception e) {e.printStackTrace();}System.out.println("---------序列化后读取---------");System.out.println(user.toString());}}class User implements Serializable {private String username;private transient String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
打印结果:
---------序列化前读取---------
User{username='zhangsan', password='123'}
---------序列化后读取---------
User{username='zhangsan', password='null'}
可以看到,字段password在反序列化过程中,没有被读取到
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
