Java transient鍏抽敭瀛

Java transient鍏抽敭瀛?
Volatile淇グ鐨勬垚鍛樺彉閲忓湪姣忔琚嚎绋嬭闂椂锛岄兘寮鸿揩浠庝富鍐呭瓨涓噸璇昏鎴愬憳鍙橀噺鐨勫€笺€傝€屼笖锛屽綋鎴愬憳鍙橀噺鍙戠敓鍙樺寲鏃讹紝寮鸿揩绾跨▼灏嗗彉鍖栧€煎洖鍐欏埌涓诲唴瀛樸€傝繖鏍峰湪浠讳綍鏃跺埢锛屼袱涓笉鍚岀殑绾跨▼鎬绘槸鐪嬪埌鏌愪釜鎴愬憳鍙橀噺鐨勫悓涓€涓€笺€?nbsp; 
 
Java璇█瑙勮寖涓寚鍑猴細涓轰簡鑾峰緱鏈€浣抽€熷害锛屽厑璁哥嚎绋嬩繚瀛樺叡浜垚鍛樺彉閲忕殑绉佹湁鎷疯礉锛岃€屼笖鍙綋绾跨▼杩涘叆鎴栬€呯寮€鍚屾浠g爜鍧楁椂鎵嶄笌鍏变韩鎴愬憳鍙橀噺鐨勫師濮嬪€煎姣斻€?nbsp; 
 
杩欐牱褰撳涓嚎绋嬪悓鏃朵笌鏌愪釜瀵硅薄浜や簰鏃讹紝灏卞繀椤昏娉ㄦ剰鍒拌璁╃嚎绋嬪強鏃剁殑寰楀埌鍏变韩鎴愬憳鍙橀噺鐨勫彉鍖栥€?nbsp; 
 
鑰寁olatile鍏抽敭瀛楀氨鏄彁绀篤M锛氬浜庤繖涓垚鍛樺彉閲忎笉鑳戒繚瀛樺畠鐨勭鏈夋嫹璐濓紝鑰屽簲鐩存帴涓庡叡浜垚鍛樺彉閲忎氦浜掋€?nbsp; 
 
浣跨敤寤鸿锛氬湪涓や釜鎴栬€呮洿澶氱殑绾跨▼璁块棶鐨勬垚鍛樺彉閲忎笂浣跨敤volatile銆傚綋瑕佽闂殑鍙橀噺宸插湪synchronized浠g爜鍧椾腑锛屾垨鑰呬负甯搁噺鏃讹紝涓嶅繀浣跨敤銆?nbsp; 
 
鐢变簬浣跨敤volatile灞忚斀鎺変簡VM涓繀瑕佺殑浠g爜浼樺寲锛屾墍浠ュ湪鏁堢巼涓婃瘮杈冧綆锛屽洜姝や竴瀹氬湪蹇呰鏃舵墠浣跨敤姝ゅ叧閿瓧銆?nbsp; 
 
java鍏抽敭瀛桾ransient  
 
杞嚜http://horst.sun.blog.163.com/blog/static/348849612007614494492/  
 
缈昏瘧鑷猦ttp://www.devx.com/tips/Tip/13726銆?nbsp; 
 
Java鐨剆erialization鎻愪緵浜嗕竴绉嶆寔涔呭寲瀵硅薄瀹炰緥鐨勬満鍒躲€傚綋鎸佷箙鍖栧璞℃椂锛屽彲鑳芥湁涓€涓壒娈婄殑瀵硅薄鏁版嵁鎴愬憳锛屾垜浠笉鎯?nbsp; 
鐢╯erialization鏈哄埗鏉ヤ繚瀛樺畠銆備负浜嗗湪涓€涓壒瀹氬璞$殑涓€涓煙涓婂叧闂璼erialization锛屽彲浠ュ湪杩欎釜鍩熷墠鍔犱笂鍏抽敭瀛梩ransient銆?nbsp; 
transient鏄疛ava璇█鐨勫叧閿瓧锛岀敤鏉ヨ〃绀轰竴涓煙涓嶆槸璇ュ璞′覆琛屽寲鐨勪竴閮ㄥ垎銆傚綋涓€涓璞¤涓茶鍖栫殑鏃跺€欙紝transient鍨嬪彉閲忕殑鍊间笉鍖呮嫭鍦ㄤ覆琛屽寲鐨勮〃绀轰腑锛岀劧鑰岄潪transient鍨嬬殑鍙橀噺鏄鍖呮嫭杩涘幓鐨勩€?nbsp;
娉ㄦ剰static鍙橀噺涔熸槸鍙互涓茶鍖栫殑
 
棣栧厛锛岃鎴戜滑鐪嬩竴浜汮ava serialization鐨勪唬鐮侊細  
public class LoggingInfo implements java.io.Serializable  
{  
    private Date loggingDate = new Date();  
    private String uid;  
    private transient String pwd;  
     
    LoggingInfo(String user, String password)  
    {  
        uid = user;  
        pwd = password;  
    }  
    public String toString()  
    {  
        String password=null;  
        if(pwd == null)  
        {  
        password = "NOT SET";  
        }  
        else 
        {  
            password = pwd;  
        }  
        return "logon info: \n   " + "user: " + uid +  
            "\n   logging date : " + loggingDate.toString() +  
            "\n   password: " + password;  
    }  
}  
 
鐜板湪鎴戜滑鍒涘缓涓€涓繖涓被鐨勫疄渚嬶紝骞朵笖涓茶鍖?serialize)瀹?,鐒跺悗灏嗚繖涓覆琛屽寲瀵硅薄鍐欏纾佺洏銆?nbsp; 
 
LoggingInfo logInfo = new LoggingInfo("MIKE", "MECHANICS");  
System.out.println(logInfo.toString());  
try 
{  
   ObjectOutputStream o = new ObjectOutputStream(  
                new FileOutputStream("logInfo.out"));  
   o.writeObject(logInfo);  
   o.close();  
}  
catch(Exception e) {//deal with exception}  
 
To read the object back, we can write  
 
try 
{  
   ObjectInputStream in =new ObjectInputStream(  
                new FileInputStream("logInfo.out"));  
   LoggingInfo logInfo = (LoggingInfo)in.readObject();  
   System.out.println(logInfo.toString());  
}  
catch(Exception e) {//deal with exception}  
 
濡傛灉鎴戜滑杩愯杩欐浠g爜锛屾垜浠細娉ㄦ剰鍒颁粠纾佺洏涓鍥?read鈥斺€攂ack (de-serializing))鐨勫璞℃墦鍗皃assword涓?NOT SET"銆傝繖鏄綋鎴戜滑瀹氫箟pwd鍩熶负transient鏃讹紝鎵€鏈熸湜鐨勬纭粨鏋溿€?nbsp; 
鐜板湪锛岃鎴戜滑鏉ョ湅涓€涓嬬矖蹇冨寰卼ransient鍩熷彲鑳藉紩璧风殑娼滃湪闂銆傚亣璁炬垜浠慨鏀逛簡绫诲畾涔夛紝鎻愪緵缁檛ransient鍩熶竴涓粯璁ゅ€硷紝  
浠g爜濡備笅锛?nbsp; 
 
public class GuestLoggingInfo implements java.io.Serializable  
{  
    private Date loggingDate = new Date();  
    private String uid;  
    private transient String pwd;  
     
    GuestLoggingInfo()  
    {  
        uid = "guest";  
        pwd = "guest";  
    }  
    public String toString()  
    {  
        //same as above  
     }  
}  
鐜板湪锛屽鏋滄垜浠┛琛屽寲GuestLoggingInfo鐨勪竴涓疄渚嬶紝灏嗗畠鍐欏叆纾佺洏锛屽苟涓斿啀灏嗗畠浠庣鐩樹腑璇诲嚭锛屾垜浠粛鐒剁湅鍒拌鍥炵殑瀵硅薄鎵撳嵃password 涓?"NOT SET"銆傚綋浠庣鐩樹腑璇诲嚭鏌愪釜绫荤殑瀹炰緥鏃讹紝瀹為檯涓婂苟涓嶄細鎵ц杩欎釜绫荤殑鏋勯€犲嚱鏁帮紝  
鑰屾槸杞藉叆浜嗕竴涓绫诲璞$殑鎸佷箙鍖栫姸鎬侊紝骞跺皢杩欎釜鐘舵€佽祴鍊肩粰璇ョ被鐨勫彟涓€涓璞°€?nbsp;