Java关键字:transient

2018-01-16 12:49:50来源:oschina作者:solidwang人点击

分享
一、对象序列化

Java中对象的序列化是指将对象转换成字节序列,字节序列中包含了对象的数据和信息,序列化的数据可用于rpc数据传输等用途。


序列化的目的是为了反序列化,从而得到对象的数据和信息。Java中提供了Serializable接口,model实现该接口就是为了达到序列化的效果。


二、transient的用途

那么有这样一个问题,有些数据我们是不想序列化传输的,例如用户的密码,如果密码进行序列化传输有被盗的风险。此外,还有些数据是可以其他方式得到的,也不需要序列化传输,可以节省内存空间。于是出现了transient关键字,被transient修辞的成员变量不被序列化。


三、案例
/*
* Copyright (c) 2018 Sohu. All Rights Reserved
*/
package com.solid4j.serializable;
import java.io.Serializable;
/**
* @author: solidwang
* @since 1.0
*/
public class User implements Serializable {private String username;
private transient String password;
public User(String username, String password) {
this.username = username;
this.password = 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;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '/'' +
", password='" + password + '/'' +
'}';
}
}
/*
* Copyright (c) 2018 Sohu. All Rights Reserved
*/
package com.solid4j.serializable;
import java.io.*;
/**
* @author: solidwang
* @since 1.0
*/
public class TransientTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User user = new User("solid4j", "abc");
System.out.println(user);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file.txt"));
oos.writeObject(user);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file.txt"));
User obj = (User)ois.readObject();
System.out.println(obj);
}
}

输出结果:


User{username='solid4j', password='abc'} User{username='solid4j', password='null'}


微信扫一扫

第七城市微信公众平台