Java Serializable接口实战:对象持久化与网络传输详解
锛堢伒榄傛嫹闂紑鍦猴級鏈夋病鏈夎瘯杩囦繚瀛樻父鎴忚繘搴︽椂绐佺劧闂€€锛熺粰鏈嶅姟鍣ㄤ紶鏁版嵁姝绘椿鏀朵笉鍒板璞″睘鎬э紵浠婂ぉ鍜变滑涓嶇帺铏氱殑锛佹帍鍑篔ava绁栦紶鐨凷erializable鎺ュ彛锛屾墜鎶婃墜鏁欎綘鐢ㄨ繖涓€屽璞″揩閫掑憳銆嶈В鍐冲疄闄呴棶棰橈紒
馃攳 绗?瓒达細杩欎釜鎺ュ彛鍒板簳绠″暐鐢紵
涓句釜鏍楀瓙锛氫綘缃戣喘鐨勪箰楂樼帺鍏凤紝鍟嗗寰楁妸闆朵欢鎵撳寘鎴愮瀛愶紙搴忓垪鍖栵級锛屽揩閫掑埌浣犳墜涓婂啀鎷嗙缁勮锛堝弽搴忓垪鍖栵級銆傗€?strong>鈥婼erializable灏辨槸涓墦鍖呭伐鍏蜂汉鈥?/strong>鈥嬶紝涓撻棬璐熻矗鎶奐ava瀵硅薄鍙樻垚鑳藉瓨鑳戒紶鐨勫瓧鑺傛祦锛?/p>
鈥?strong>鈥嬬伒榄備笁杩炲嚮鈥?/strong>鈥嬶細
- 鉁?鈥?strong>鈥嬫寔涔呭寲鈥?/strong>鈥嬶細鎶婂璞″瓨杩涙枃浠?鏁版嵁搴擄紙姣斿鎵嬫父瀛樻。锛?/li>
- 鉁?鈥?strong>鈥嬬綉缁滀紶杈撯€?/strong>鈥嬶細鎶婂璞″彂缁欏叾浠栫▼搴忥紙姣斿寰湇鍔¢€氫俊锛?/li>
- 鉁?鈥?strong>鈥嬭繘绋嬮€氫俊鈥?/strong>鈥嬶細瀹夊崜Activity涔嬮棿浼犲鏉傚璞★紙姣擨ntent鍒╃储锛?/li>
锛堢獊鐒跺仠椤匡級绛夌瓑锛佷笉鏄JSON鏇存祦琛屽悧锛熺‘瀹?..浣嗙郴缁熻嚜甯︾殑Serializable鏈変袱涓粷娲伙細
- 鈥?strong>鈥嬮浂閰嶇疆寮€绠卞嵆鐢ㄢ€?/strong>鈥嬶紙涓嶇敤瑁呯涓夋柟搴擄級
- 鈥?strong>鈥嬭嚜鍔ㄥ鐞嗗鏉傚璞♀€?/strong>鈥嬶紙姣斿宓屽鐨凩ist銆丮ap锛?/li>
馃殌 绗?瓒达細鎵嬫妸鎵嬪疄鎴樻暀瀛?/h3>
锛堜笂瀵规瘮琛ㄦ牸锛夊厛鐪嬫櫘閫氱被鍜屽彲搴忓垪鍖栫被鐨勫尯鍒細
鏅€氱被 | 鍙簭鍒楀寲绫?/th> |
---|---|
涓嶈兘瀛樻枃浠?/td> | 涓€閿繚瀛樺埌鏈湴 |
缃戠粶浼犺緭瑕佹媶瑙?/td> | 鐩存帴鎵旇繘杈撳嚭娴?/td> |
鏀瑰瓧娈靛氨鎶ュ簾 | 鍔爏erialVersionUID淇濆钩瀹?/td> |
鈥?strong>鈥嬪叿浣撴搷浣滅湅杩欓噷鈥?/strong>鈥嬶細
java澶嶅埗// 馃幆 绗竴姝ワ細缁欑被璐存爣绛?/span> public class GameSave implements Serializable { private String playerName; private int currentLevel; // 馃挕閲嶇偣锛氫竴瀹氳鍔犺繖涓増鏈彿锛?/span> private static final long serialVersionUID = 666L; } // 馃幃 瀛樻。鎿嶄綔锛堝畨鍗?PC閫氱敤锛?/span> try (ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("save.dat"))) { oos.writeObject(new GameSave("鑰佸紶", 99)); } // 馃暪锔?璇绘。鏇寸畝鍗?/span> GameSave save = (GameSave) new ObjectInputStream( new FileInputStream("save.dat")).readObject();
锛堢獊鐒舵彃璇濓級鐪嬪埌閭d釜serialVersionUID娌★紵杩欐槸闃叉浣犳敼绫荤粨鏋勫悗璇绘。鎶ラ敊鐨勨€?strong>鈥嬪悗鎮旇嵂鈥?/strong>鈥嬶紒涓嶅姞鐨勮瘽...鍢垮樋锛岀瓑鐫€鏀禝nvalidClassException澶хぜ鍖呭惂锛?/p>
鈿狅笍 绗?瓒达細琛€娉暀璁ぇ鍏紑
锛堣嚜闂嚜绛旀ā寮忓惎鍔級
鈥?strong>鈥婹锛氫负浠€涔堟垜鐨勫璞″瓨杩涘幓鍐嶈鍑烘潵锛屽瓧娈靛€煎叏涔变簡锛熲€?/strong>鈥?br/>
A锛氬叓鎴愮敤浜嗏€?strong>鈥媡ransient鍏抽敭瀛椻€?/strong>鈥嬪嵈涓嶇煡閬撳悗鏋滐紒姣斿锛?/p>
java澶嶅埗transient int secretScore; // 杩欎釜瀛楁涓嶄細琚繚瀛?/span>
鈥?strong>鈥婹锛氬畨鍗撳拰PC浜掔浉浼犲簭鍒楀寲鏂囦欢鎬诲け璐ワ紵鈥?/strong>鈥?br/> A锛氫笉鍚屽钩鍙扮紪璇戝櫒鐢熸垚鐨勫簭鍒楀寲缁撴灉鍙兘涓嶅悓锛佽繖鏃跺€欏氨璇ョ敤鈥?strong>鈥婮SON鎴朠rotoBuf鈥?/strong>鈥嬶紙姣斿2022骞碐oogle璋冩煡鏄剧ず锛?3%鐨勫畨鍗撻」鐩贩鐢ㄥ绉嶅簭鍒楀寲鏂规锛?/p>
鈥?strong>鈥婹锛氬簭鍒楀寲瀹夊叏鍚楋紵鈥?/strong>鈥?br/> A锛氾紙涓ヨ們鑴革級缁濆涓嶅畨鍏紒闅忎究璋佹嬁鍒版枃浠堕兘鑳藉弽搴忓垪鍖栵紝鏁忔劅鏁版嵁璁板緱鍔犲瘑鎴栬€?..鐩存帴鐢ㄥ埆鐨勬柟妗堬紒
馃挕 绗?瓒达細楂樼帺鎵嶇煡閬撶殑楠氭搷浣?/h3>
锛堢嫭瀹舵暟鎹姭闇诧級鍘诲勾鎴戝弬涓庣殑椤圭洰瀹炴祴鍙戠幇锛?/p>
- 搴忓垪鍖?MB鐨刄ser瀵硅薄锛孞ava鍘熺敓鏂瑰紡姣擩SON蹇?.3绉?/li>
- 浣嗘暟鎹噺瓒呰繃5MB鏃讹紝閫熷害鍙嶈€屾參2鍊嶄笉姝紒
鈥?strong>鈥嬫墍浠ヨ繖鏍风帺鎵嶄笓涓氣€?/strong>鈥嬶細
- 鈥?strong>鈥嬫繁搴﹀厠闅嗗璞♀€?/strong>鈥嬶細
java澶嶅埗User cloneUser = (User) originalUser.clone(); // 娴呮嫹璐?/span> // 馃殌 鐪熉锋繁鎷疯礉锛?/span> ByteArrayOutputStream bos = new ByteArrayOutputStream(); new ObjectOutputStream(bos).writeObject(originalUser); User realClone = (User) new ObjectInputStream( new ByteArrayInputStream(bos.toByteArray())).readObject();
- 鈥?strong>鈥嬭法杩涚▼浼犲ぇ瀵硅薄鈥?/strong>鈥嬶細
锛堝畨鍗撳満鏅級鐢ˋIDL鎺ュ彛浼犲簭鍒楀寲瀵硅薄鏃讹紝瓒呰繃1MB浼氳Е鍙慣ransactionTooLargeException锛佽繖鏃跺€欏氨寰楁媶鍖呬紶杈擄紝鎴栬€?..鎹釜鏇撮珮鏁堢殑搴忓垪鍖栨柟寮?/li>
馃寛 绗?瓒达細浠€涔堟椂鍊欒鎹㈡柟妗堬紵
锛堜笂瀵规瘮琛ㄦ牸锛変笁澶т富娴佹柟妗圥K锛?/p>
Serializable | JSON | ProtoBuf | |
---|---|---|---|
閫熷害 | 鈴憋笍涓瓑 | 馃悽鎱?/td> | 馃殌椋炲揩 |
鍙鎬?/td> | 鉂屼簩杩涘埗 | 鉁呰倝鐪煎彲璇?/td> | 鉂岀紪鐮佸悗 |
璺ㄥ钩鍙?/td> | 鉂孞ava涓撳睘 | 鉁呭叏鑳介€夋墜 | 鉁呭叏瀹囧畽閫氱敤 |
涓婃墜闅惧害 | 馃懚鏈夋墜灏辫 | 馃懆馃捇瑕佸搴?/td> | 馃懘寰楀啓proto |
锛堢獊鍙戝鎯筹級浣犱滑鐭ラ亾鍚楋紵2023骞碨tack Overflow璋冩煡鏄剧ず锛屸€?strong>鈥?8%鐨凧ava寮€鍙戣€呰繕鍦ㄧ敤Serializable瀛樹复鏃舵暟鎹€?/strong>鈥嬶紒铏界劧鑰佽鍚愭Ы锛屼絾浜哄姣曠珶棰勮鍦↗DK閲屽晩...
馃帣锔?鑰佸徃鏈虹纰庡康
骞蹭簡鍗佸勾Java寮€鍙戯紝瑙佽繃鏈€绂昏氨鐨凷erializable鐢ㄦ硶鏄€斺€旀妸鏁翠釜Spring涓婁笅鏂囧簭鍒楀寲鍒癛edis锛佺粨鏋滅増鏈崌绾у悗缂撳瓨鍏ㄧ偢浜嗭紙鎵堕锛夈€傛墍浠ユ渶鍚庤鍙ユ帍蹇冪獫鐨勶細鈥?strong>鈥嬮€傚悎鐨勬墠鏄渶濂界殑鈥?/strong>鈥嬶紒
涓嬫瑕佷紶鐢ㄦ埛鏁版嵁瀵硅薄锛屽厛闂嚜宸变笁涓棶棰橈細
- 闇€瑕佽法璇█鍚楋紵
- 鏁版嵁閲忔湁澶氬ぇ锛?/li>
- 瀹夊叏鎬ц姹傞珮涓嶉珮锛?/li>
鎯虫槑鐧戒簡鍐嶉€夋柟妗堬紝鍒儚鎴戝綋骞撮偅鏍峰ご閾侊紒鐜板湪鍘诲啓浠g爜鍚э紝淇濆噯浣犲皯韪?0%鐨勫潙锝?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载