JAvaキーワードtransient


Transientはjavaのキーワードで、このドメインが永続化されないことを示します.すなわち,1つのオブジェクトが永続化されると,transientキーワードで修飾される変数は永続化されたコンテンツに含まれない.
適用する場合:
私达が2つのシステムがドッキングする时、もしシステムAがシステムBに1つの持続化の対象Oを提供するならば、対象Oの中でいくつかの重要なプライバシーの情报を含んで、私达はBシステムに提供したくありません!この時点でこのドメインにキーワードtransientを付けることができます.
次に、tranisentキーワードを永続化するかどうかの違いを見てみましょう.
ネットワーク・ユーザーのオブジェクト(NetUser)がある場合は、永続化後にネットワークを介して別のシステムに転送します.NetUserにとって、彼のuNameとuPwdは重要なプライバシー情報です.他のシステムに提供したくありません.
class NetUser implements Serializable{

    private int uId;

    private String uName;

    private String uNickName;

    private String uPwd;

    NetUser() {
    }

    NetUser(int uId, String uPwd, String uNickName, String uName) {
        this.uId = uId;
        this.uPwd = uPwd;
        this.uNickName = uNickName;
        this.uName = uName;
    }

    public int getuId() {
        return uId;
    }

    public void setuId(int uId) {
        this.uId = uId;
    }

    public String getuPwd() {
        return uPwd;
    }

    public void setuPwd(String uPwd) {
        this.uPwd = uPwd;
    }

    public String getuName() {
        return uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getuNickName() {
        return uNickName;
    }

    public void setuNickName(String uNickName) {
        this.uNickName = uNickName;
    }
}

public static void main(String[] args) {
        NetUser user = new NetUser(1, "polkm", "  ", "xpcomrade");
        ObjectOutputStream oos = null;
        try {
            //            
            oos = new ObjectOutputStream(new FileOutputStream(new File("D://netuser.out")));
            oos.writeObject(user);
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (oos != null)  oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        ObjectInputStream ois = null;
        try {
            //            
            ois = new ObjectInputStream(new FileInputStream(new File("D://netuser.out")));
            NetUser u = (NetUser) ois.readObject();
            System.out.printf("uId:%s
", u.getuId());             System.out.printf("uName:%s
", u.getuName());             System.out.printf("uNickName:%s
", u.getuNickName());             System.out.printf("uPwd:%s
", u.getuPwd());         } catch (Exception e) {         } finally {             try {                 if (ois != null ) ois.close();             } catch (IOException e) {                 e.printStackTrace();             }         }     }
上記のコードを実行すると、コンソールに次の情報が表示されます.
uId:1
uName:xpcomrade
uNickName:  
uPwd:polkm

次に、uNameとuPwdにtransientキーワードを追加します.
class NetUser implements Serializable{

    private int uId;

    private transient String uName;

    private String uNickName;

    private transient  String uPwd;

    NetUser() {
    }

    NetUser(int uId, String uPwd, String uNickName, String uName) {
        this.uId = uId;
        this.uPwd = uPwd;
        this.uNickName = uNickName;
        this.uName = uName;
    }

    public int getuId() {
        return uId;
    }

    public void setuId(int uId) {
        this.uId = uId;
    }

    public String getuPwd() {
        return uPwd;
    }

    public void setuPwd(String uPwd) {
        this.uPwd = uPwd;
    }

    public String getuName() {
        return uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getuNickName() {
        return uNickName;
    }

    public void setuNickName(String uNickName) {
        this.uNickName = uNickName;
    }
}
結果を見てみましょう.
uId:1
uName:null
uNickName:  
uPwd:null

逆シーケンス化後、uNameとuPwdの両方がnullであることがわかります.