java transient 应用场景_transient 关键字在JAVA中的应用

“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。

打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。

如定义类:

public class People implements Serializable {

private static final long serialVersionUID = 8294180014912103005L;

/**

* 用户名

*/

private String username;

/**

* 密码

*/

private transient String password;

}

密码字段为transient,这时候如果对该对象进行序列化,这个密码字段是不会被保存的。

以下例子展示了这个行为:

public static void main(String[] args) throws Exception {

People p = new People();

p.setUsername("snowolf");

p.setPassword("123456");

System.err.println("------操作前------");

System.err.println("username: " + p.getUsername());

System.err.println("password: " + p.getPassword());

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(

"people.txt"));

oos.writeObject(p);

oos.flush();

oos.close();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(

"people.txt"));

p = (People) ois.readObject();

ois.close();

System.err.println("------操作后------");

System.err.println("username: " + p.getUsername());

System.err.println("password: " + p.getPassword());

}

执行结果是:

------操作前------

username: snowolf

password: 123456

------操作后------

username: snowolf

password: null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值