java中transient(瞬时)关键字用法

当我们对序列化进行控制时,可能某个特定子对象不想让java的序列化机制自动保存与恢复。如果子对象表示的信息是private属性,一经序列化处理,人们就可以通过读取文件或者拦截网络传输的方式来访问到它。

如果我们正在操作的是一个Serializable对象,那么所有的序列化操作都会自动进行。为了能够予以控制,可以用transient关键字逐个字段地关闭序列化。

在thinking in java书中的例子Login类保存了某个特定的登录回话信息。登录的合法性通过校验后,我们想把数据保存下来,但不保存密码,故password字段标志为transient。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.concurrent.TimeUnit;
 
public class Logon implements Serializable{
    private Date date = new Date();
    private String username;
    private transient String password;
    public Logon(String name , String pwd){
        this.username=name;
        this.password=pwd;
    }
    public String toString(){
        return "Logon info:\n username "+username+"\n date: "+date+"\n password: "+password;
    }
    public static void main(String[] args) throws Exception {
        Logon a = new Logon("Hulk", "myLittlePony");
        System.out.println("Logon a= "+a);
        ObjectOutputStream o = new ObjectOutputStream(
                new FileOutputStream("source/Logon.out"));
        o.writeObject(a);
        o.close();
        TimeUnit.SECONDS.sleep(1);
        //get a
        ObjectInputStream in = new ObjectInputStream(
                new FileInputStream("source/Logon.out"));
        System.out.println("Recovering object at "+new Date());
        a=(Logon)in.readObject();
        System.out.println("Logon a = "+a);
    }
}

转载于:https://my.oschina.net/coolbash/blog/83310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值