锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 瑕佸疄鐜板簭鍒楀寲錛屽垯蹇呴』瀹炵幇serializable鎴朎xternalizable鎺ュ彛銆傚悗鑰呯戶鎵胯嚜鍓嶈咃紝涓よ呯殑鍖哄埆錛氬疄鐜板墠鑰呯殑綾誨彲浠ラ噰鐢ㄩ粯璁ょ殑搴忓垪鍖栨柟寮忋傝屽疄鐜板悗鑰呯殑綾誨垯瀹屽叏鐢辮嚜韜潵鎺у埗搴忓垪鍖栫殑琛屼負銆?br />
鍦ㄥ簭鍒楀寲鍜屽弽搴忓垪鍖栬繃紼嬩腑闇瑕佺壒孌婂鐞嗙殑綾誨繀欏諱嬌鐢ㄤ笅鍒楀噯紜鍚嶆潵瀹炵幇鐗規畩鏂規硶錛?/p>
濡傛灉Customer綾誨疄鐜頒簡Externalizable鎺ュ彛錛岄偅涔圕ustomer綾誨繀欏誨疄鐜皉eadExternal ObjectOutputStream鍙兘瀵瑰疄鐜頒簡Serializable鎺ュ彛鐨勭被鐨勫璞¤繘琛屽簭鍒楀寲銆傞粯璁ゆ儏鍐典笅錛孫bjectOutputStream鎸夌収榛樿鏂瑰紡搴忓垪鍖栵紝榪欑搴忓垪鍖栨柟寮忎粎浠呭瀵硅薄鐨勯潪transient鐨勫疄渚嬪彉閲忚繘琛屽簭鍒楀寲錛岃屼笉浼氬簭鍒楀寲瀵硅薄鐨則ransient鐨勫疄渚嬪彉閲忥紝涔熶笉浼氬簭鍒楀寲闈欐佸彉閲忋?/p>
鑰屽綋ObjectInputStream鎸夌収榛樿鏂瑰紡鍙嶅簭鍒楀寲鏃訛紝鏈変互涓嬬壒鐐癸細 琚玹ransient淇グ絎︽潵淇グ鐨勫疄渚嬪彉閲忔槸涓嶄細搴忓垪鍖栫殑錛屼竴鑸敤transient鏉ヤ慨楗頒互涓嬬被鍨嬬殑鐨勫彉閲忥細 錛戯級 瀹炰緥鍙橀噺涓嶄唬琛ㄥ璞$殑鍥烘湁鐨勫唴閮ㄦ暟鎹紝浠呬粎浠h〃鍏鋒湁涓瀹氶昏緫鍚箟鐨勪復鏃舵暟鎹?br />
錛掞級 瀹炰緥鍙橀噺琛ㄧず涓浜涙瘮杈冩晱鎰熺殑淇℃伅錛屽瀵嗙爜錛屽嚭浜庡畨鍏ㄦ柟闈㈢殑鍘熷洜錛屼笉甯屾湜瀵瑰叾搴忓垪鍖栥?br />
錛擄級 瀹炰緥鍙橀噺闇瑕佹寜鐓х敤鎴瘋嚜瀹氫箟鐨勬柟寮忓簭鍒楀寲錛屽緇忚繃鍔犲瘑鍚庡啀搴忓垪鍖栥傝繖榪欑鎯呭喌涓嬪彲浠ュ皢鍏剁敤transient淇グ錛岀劧鍚庡湪writeObject()鏂規硶涓鍏跺簭鍒楀寲銆?nbsp; 鍙傝SerializableDemo涓殑Customer2鍙奜rder2綾諱箣闂寸殑鍏崇郴銆?br />
褰撻氳繃ObjectOutputStream瀵硅薄鐨剋riteObject(customer)鏂規硶搴忓垪鍖朇ustomer2瀵硅薄鏃訛紝涔熶細搴忓垪鍖栦笌瀹冨叧鑱旂殑Order2瀵硅薄銆傝屽綋閫氳繃ObjectInputStream瀵硅薄鐨剅eadObject()鏂規硶鍙嶅簭鍒楀寲Customer2瀵硅薄鏃訛紝瀹為檯涓婁細瀵規暣涓璞″浘鍙嶅簭鍒楀寲銆?br />
濡傛灉瀵硅薄A鎸佹湁瀵硅薄B鐨勫紩鐢紙娉ㄦ剰鏄疉鎸佹湁B鐨勫紩鐢級錛屼互鍙婇棿鎺ユ寔鏈夊叾浠栧璞$殑寮曠敤錛屽垯鎸夌収榛樿鏂瑰紡搴忓垪鍖栧璞鏃訛紝浼氬皢A浠ュ強A鎸佹湁鐨勪互鍙婇棿鎺ユ寔鏈夌殑鎵鏈夊璞¢兘搴忓垪鍖栥傚弽搴忓垪鍖栦篃鏄姝ゃ?/p>
濡傛灉鐢ㄦ埛甯屾湜鎺у埗綾葷殑搴忓垪鍖栨柟寮忥紝鍙互鍦ㄥ彲搴忓垪鍖栫被涓彁渚涗互涓嬪艦寮忕殑writeObject()鏂規硶鍜宺eadObject()鏂規硶錛?/p>
涓鑸殑鍋氭硶鏄紝鍦╳riteObject()鏂規硶涓紝閫夌暀楠糘bjectOutputStream鐨刣efaultWriteObject()鏂規硶錛屼嬌寰楀璞¤緭鍑烘祦鍏堟墽琛岄粯璁ょ殑搴忓垪鍖栨搷浣溿?br />
鍙嶅簭鍒楀寲鏃訛紝鍦╮eadObject()鏂規硶涓紝鍏堣皟鐢∣bjectInputStream鐨刣efaultReadObject()鏂規硶銆?/p>
Externallizable鎺ュ彛緇ф壙鑷猄erializable鎺ュ彛錛屽鏋滀竴涓被瀹炵幇浜咵xternalizable鎺ュ彛錛岄偅涔堝皢瀹屽叏鐢辮繖涓被鎺у埗鑷韓鐨勫簭鍒楀寲琛屼負銆侲xternalizable鎺ュ彛涓0鏄庝簡涓や釜鏂規硶錛?br />
writeExternal璐熻矗搴忓垪鍖栨搷浣滐紝readExternal璐熻矗鍙嶅簭鍒楀寲鎿嶄綔銆傚湪瀵瑰疄鐜頒簡Externallizable鎺ュ彛鐨勭被鐨勫璞¤繘琛屽弽搴忓垪鍖栨椂錛屼細鍏堣皟鐢ㄧ被鐨勪笉甯﹀弬鏁扮殑鏋勯犳柟娉曪紝榪欐槸鏈夊埆榛樿鍙嶅簭鍒楀寲鏂瑰紡鐨勶紙瑙侊紥錛夈傛墍浠ュ疄鐜癊xternalizable鎺ュ彛鐨勭被蹇呴』瑕佹湁涓嶅惈鍙傛暟鐨勬瀯閫犳柟娉曘?/p>
瀹炰緥瑙丼erializableDemo閲岀殑Customer5鐨勪袱涓増鏈傚皢Customer錛?錛愬拰SimpleServer鏀懼湪server绔紝灝咰ustomer2.0鍜孲impleClient鏀懼湪Client绔紝鐩存帴榪愯錛屽皢鍙戠幇鎶涘嚭閿欒錛屾樉紺轟笉鍏煎錛岃В鍐沖姙娉曟槸鎵嬪姩灝嗕袱涓狢ustomer鐨剆erialVersionUID璁句負鍚屼竴涓鹼紝榪欐牱灝辮兘鍏煎銆備絾鏄繖縐嶅姙娉曠殑鑳藉姏寰堟湁闄愶紝褰撲竴涓被鐨勪笉鍚岀増鏈殑serialVersionUID鐩稿悓錛屼粛鐒舵湁鍙兘鍑虹幇搴忓垪鍖栦笉鍏煎鐨勬儏鍐點傚洜涓哄簭鍒楀寲鍏煎鎬т笉浠呭彇鍐充簬serialVersionUID錛岃繕鍙栧喅浜庣被鐨勪笉鍚岀増鏈殑瀹炵幇緇嗚妭鍜屽簭鍒楀寲緇嗚妭銆?/p>
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
writeObject 鏂規硶璐熻矗鍐欏叆鐗瑰畾綾葷殑瀵硅薄鐨勭姸鎬侊紝浠ヤ究鐩稿簲鐨?readObject 鏂規硶鍙互榪樺師瀹冦傞氳繃璋冪敤 out.defaultWriteObject 鍙互璋冪敤淇濆瓨 Object 鐨勫瓧孌電殑榛樿鏈哄埗銆傝鏂規硶鏈韓涓嶉渶瑕佹秹鍙婂睘浜庡叾瓚呯被鎴栧瓙綾葷殑鐘舵併傜姸鎬佹槸閫氳繃浣跨敤 writeObject 鏂規硶鎴栦嬌鐢?DataOutput 鏀寔鐨勭敤浜庡熀鏈暟鎹被鍨嬬殑鏂規硶灝嗗悇涓瓧孌靛啓鍏?ObjectOutputStream 鏉ヤ繚瀛樼殑銆?
readObject 鏂規硶璐熻矗浠庢祦涓鍙栧茍榪樺師綾誨瓧孌點傚畠鍙互璋冪敤 in.defaultReadObject 鏉ヨ皟鐢ㄩ粯璁ゆ満鍒訛紝浠ヨ繕鍘熷璞$殑闈為潤鎬佸拰闈炵灛鎬佸瓧孌點俤efaultReadObject 鏂規硶浣跨敤嫻佷腑鐨勪俊鎭潵鍒嗛厤嫻佷腑閫氳繃褰撳墠瀵硅薄涓浉搴斿懡鍚嶅瓧孌典繚瀛樼殑瀵硅薄鐨勫瓧孌點傝繖鐢ㄤ簬澶勭悊綾誨彂灞曞悗闇瑕佹坊鍔犳柊瀛楁鐨勬儏褰€傝鏂規硶鏈韓涓嶉渶瑕佹秹鍙婂睘浜庡叾瓚呯被鎴栧瓙綾葷殑鐘舵併傜姸鎬佹槸閫氳繃浣跨敤 writeObject 鏂規硶鎴栦嬌鐢?DataOutput 鏀寔鐨勭敤浜庡熀鏈暟鎹被鍨嬬殑鏂規硶灝嗗悇涓瓧孌靛啓鍏?ObjectOutputStream 鏉ヤ繚瀛樼殑銆?nbsp;
鍋囧畾鏈変竴涓悕涓篊ustomer鐨勭被錛屽畠鐨勫璞¢渶瑕佸簭鍒楀寲錛屽鏋淐ustomer綾諱粎浠呭疄鐜頒簡Serializable鎺ュ彛鐨勭被錛岄偅涔堝皢鎸夌収浠ヤ笅鏂瑰紡搴忓垪鍖栧強鍙嶅簭鍒楀寲Customer瀵硅薄錛?br />
濡傛灉Customer綾諱粎浠呭疄鐜頒簡Serializable鎺ュ彛鐨勭被錛屽茍涓旇繕瀹氫箟浜唕eadObject(ObjectInputStream in)鍜寃riteObject(ObjectOutputStream out)鏂規硶錛岄偅涔堝皢鎸夌収浠ヤ笅鏂瑰紡搴忓垪鍖栧強鍙嶅簭鍖朇ustomer瀵硅薄錛?
(ObjectInput in)鍜寃riteExternal(ObjectOutput out)鏂規硶銆傚湪榪欑鎯呭喌涓嬶紝灝嗘寜鐓т互涓嬫柟寮忓簭鍒楀寲鍙婂弽搴忓垪鍖朇ustomer瀵硅薄錛?/p>
2.瀹炵幇Serializable鎺ュ彛
錛?錛戝簭鍒楀寲瀵硅薄鍥?/h2>
錛?錛掓帶鍒跺簭鍒楀寲鐨勮涓?/h2>
private void writeObject java.io.ObjectOutputStream out)throws IOException
private void readObject java.io.ObjectInputStream in)throws IOException,ClassNotFoundException;
錛?錛搑eadResolve()鏂規硶鍦ㄧ渚跨被涓殑榪愮敤
濡傛灉涓涓被鎻愪緵浜唕eadResolve()鏂規硶錛岄偅涔堝湪鎵ц鍙嶅簭鍒楀寲鎿嶄綔鏃訛紝鍏堟寜鐓ч粯璁ゆ柟寮忔垨鑰呯敤鎴瘋嚜瀹氫箟鐨勬柟寮忚繘琛屽弽搴忓垪鍖栵紝鏈鍚庡啀璋冪敤readResolve()鏂規硶錛岃鏂規硶榪斿洖鐨勫璞′負鍙嶅簭鍒楀寲鐨勬渶緇堢粨鏋溿?br />
readResolve()鏂規硶搴旇鑳藉琚被鏈韓銆佸悓涓涓寘涓殑綾伙紝鎴栬呰闂紝鍥犳readResolve()鏂規硶鐨勮闂潈闄愬彲浠ユ槸pirvate銆侀粯璁ゆ垨protected綰у埆銆?br />
readResolve()鏂規硶鐢ㄦ潵閲嶆柊鎸囧畾鍙嶅簭鍒楀寲寰楀埌鐨勫璞★紝涓庢瀵瑰簲錛孞ava搴忓垪鍖栬鑼冭繕鍏佽鍦ㄥ彲搴忓垪鍖栫被涓畾涔変竴涓獁riteReplace()鏂規硶錛岀敤鏉ラ噸鏂版寚瀹氳搴忓垪鍖栫殑瀵硅薄銆倃riteReplace()鏂規硶榪斿洖涓涓狾bject綾誨瀷鐨勫璞★紝榪欎釜榪斿洖瀵硅薄鎵嶆槸鐪熸瑕佽搴忓垪鍖栫殑瀵硅薄銆傛潈闄愪篃鍙互涓轟互涓婁笁縐嶄箣涓銆?nbsp; 錛?瀹炵幇Externalizalbe鎺ュ彛
public void writeExternal(ObjectOutput out)throws IOException
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException
錛?鍙簭鍒楀寲綾葷殑涓嶅悓鐗堟湰鐨勫簭鍒楀寲鍏煎鎬?/h1>
浼拌澶у瀵?/span>finalize()閮芥湁涓熀鏈殑璁よ瘑錛岄偅灝辨槸浣滄竻鐞嗚祫婧愪箣鐢ㄣ傛瘮濡傚湪綾葷殑鏌愪釜鏂規硶涓墦寮浜嗕竴涓枃浠訛紝閭d箞浣犲彲鑳介渶瑕侀氳繃finalize()鏂規硶鏉ラ噴鏀捐璧勬簮銆備絾鏄瘽璇村洖鏉ワ紝java涓栫晫閲岋紝涓鍒囩殕瀵硅薄錛岃屼換浣曚竴涓java鐨勪漢閮界煡閬擄紝java瀵硅薄鏄笉闇瑕佹墜鍔ㄥ幓娓呯悊鐨勶紝鍥犱負java鏈夊己澶х殑鍨冨溇鍥炴敹鍣紝鏈変漢鍙兘浼氭湁鐤戦棶錛岄偅鏃㈢劧濡傛錛屼負浠涔堣繕闇瑕佸湪finalize()涓墜鍔ㄩ噴鏀捐祫婧愬憿錛熷綋鐒訛紝闈㈠榪欎竴闂錛屾湁寰堝ソ鐨勭悊鐢卞幓瑙i噴錛屽洜涓鴻祫婧愭槸鏈夐檺鐨勶紝鑰屾垜浠張鐭ラ亾鍨冨溇鍥炴敹鍣ㄧ殑綰跨▼浼樺厛綰ч潪甯鎬綆錛屽湪閫間笉寰椾互鐨勬儏鍐典笅錛屽畠鎵嶄細宸ヤ綔錛屼篃灝辨槸璇達紝鍙鍐呭瓨瓚沖錛屽け鏁堢殑瀵硅薄灝變笉浼氳娓呯悊錛屽畠鎵鎸佹湁鐨勮祫婧愪篃灝卞緱涓嶅埌閲婃斁錛岃岃祫婧愬張鏄湁闄愮殑錛屾瘮濡傛暟鎹簱榪炴帴錛屾墍浠ラ渶瑕佹垜浠幓鎵嬪姩閲婃斁銆備笉榪囪繖涓鐐癸紝鍦?/span>JDK7閲岄潰浼間箮鏄湁鎵鍙戝睍錛屽惉璇存槸浼氳嚜鍔ㄥ疄鐜拌繖涓鐐癸紝涔熷氨鏄錛?/span>sun鍙兘涓烘垜浠仛浜嗚繖涓伐浣滐紝浠ュ悗鐨勭▼搴忎腑鍙兘涓嶉渶瑕佹墜鍔ㄩ噴鏀劇被浼兼暟鎹簱璧勬簮鐨勪唬鐮佷簡銆?/span>
濡傛灉鐨勭‘濡傛錛岄偅鏄笉鏄剰鍛崇潃finalize()灝辨病鐢ㄤ簡鍛紵閿欍備笉榪?/span>finalize()紜疄鐢ㄥ埌鐨勬椂鍊欎笉浼氬緢澶氾紝瀹冧富瑕佺敤浜庝竴浜涙湰鍦版柟娉曡皟鐢ㄨ繃紼嬩腑浜х敓鐨勮祫婧愭竻鐞嗐傛瘮濡備綘閫氳繃Native method璋冪敤c璇█鐨?/span>melloc鏂規硶鍒嗛厤浜嗕竴浜涘唴瀛樼┖闂達紝鑰岃繖閮ㄥ垎鍐呭瓨鏄渶瑕?/span>c璇█鐨?/span>free()鏉ヨ繘琛岄噴鏀劇殑錛屽鏋滀笉榪欐牱錛屽氨浼氫駭鐢熷唴瀛樻硠婕忥紝鎵浠ヤ綘闇瑕佸湪finalize()涓敤Native method鏂規硶璋冪敤free()灝嗗叾閲婃斁銆?/span>
涓嶈繃璇濊鍥炴潵錛?/span>finalize()鏂規硶騫朵笉鍗佸垎淇濋櫓錛屽洜涓?/span>finalize()鍙湁鍦ㄥ瀮鍦懼洖鏀跺櫒宸ヤ綔鐨勬椂鍊欐墠浼氳璋冪敤錛屼篃灝辨槸璇達紝閫氳繃瀹冭繘琛岃祫婧愰噴鏀懼茍涓嶈兘紜繚椹笂琚噴鏀撅紝鐢氳嚦鍙兘鏍規湰涓嶄細琚噴鏀撅紙鍥犱負鍨冨溇鍥炴敹鍣ㄥ彲鑳戒笉浼氬伐浣滐級錛屽洜姝わ紝璧勬簮閲婃斁灝介噺鍙︽兂鍔炴硶錛屽埆澶浉淇?/span>finalize()鍜屽瀮鍦懼洖鏀跺櫒浜嗐?/span>