<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    Serializable java序列化

    1、實現(xiàn)Serializable回導(dǎo)致發(fā)布的API難以更改,并且使得package-private和private 這兩個本來封裝的較好的咚咚也不能得到保障了 2、Serializable會為每個類生成一個序列號,生成依據(jù)是類名、類實現(xiàn)的接口名、 public和protected方法,所以只要你一不小心改了一個已經(jīng)publish的API,并且沒有自 己定義一個long類型的叫做serialVersionUID的field,哪怕只是添加一個getXX,就會 讓你讀原來的序列化到文件中的東西讀不出來(不知道為什么要把方法名算進(jìn)去?) 3、不用構(gòu)造函數(shù)用Serializable就可以構(gòu)造對象,看起來不大合理,這被稱為 extralinguistic mechanism,所以當(dāng)實現(xiàn)Serializable時應(yīng)該注意維持構(gòu)造函數(shù)中所維 持的那些不變狀態(tài) 4、增加了發(fā)布新版本的類時的測試負(fù)擔(dān) 5、1.4版本后,JavaBeans的持久化采用基于XML的機(jī)制,不再需要Serializable 6、設(shè)計用來被繼承的類時,盡量不實現(xiàn)Serializable,用來被繼承的interface也不要 繼承Serializable。但是如果父類不實現(xiàn)Serializable接口,子類很難實現(xiàn)它,特別是 對于父類沒有可以訪問的不含參數(shù)的構(gòu)造函數(shù)的時候。所以,一旦你決定不實現(xiàn) Serializable接口并且類被用來繼承的時候記得提供一個無參數(shù)的構(gòu)造函數(shù) 7、內(nèi)部類還是不要實現(xiàn)Serializable好了,除非是static的,(偶也覺得內(nèi)部類不適合 用來干這類活的) 8、使用一個自定義的序列化方法 看看下面這個保存一個雙向鏈表的例子:public class StringList implements Serializable{?private int size = 0;?private Entry head = null;??private static class Entry implements Serializable?{? String data;? Entry next;? Entry previous;?}?...//Remainder ommitted} 這樣會導(dǎo)致鏈表的每個元素以及元素之間的關(guān)系(雙向鏈表之間的連接)都保存下來,更好的方法是提供一個自定義的序列化如下: //String List with a resonable custom serialized formclass StringList implements Serializable{? private transient int size = 0;?????? //!transient? private transient Entry head = null;? //!transient? ? //no longer serializable!? private static class Entry? {??? String data;??? Entry next;??? Entry previous;? }? ? //Appends the specified string to the list? public void add(String s) {/*...*/};? ? /**?? * Serialize this StringList instance ?? * @author yuchifang?? * @serialData The size of the list (the number of strings * it contains) is emitted(int), in the proper sequence?? */? private void writeObject(ObjectOutputStream s) throws IOException? {??? s.defaultWriteObject();??? s.writeInt(size);??? //Write out all elements in the proper order??? for (Entry e = head; e != null; e = e.next)????? s.writeObject(e.data);? }? ? private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException? {??? int numElements = s.readInt();??? ??? //Read in all elements andd insert them in list??? for (int i = 0; i < numElements; i++)????? add((String)s.readObject());? }? //...remainder omitted} 9、不管你選擇什么序列化形式,聲明一個顯式的UID: private static final long serialVersionUID = randomLongValue; 10、不需要序列化的東西使用transient注掉它吧,別什么都留著 11、writeObject/readObject重載以完成更好的序列化 readResolve 與 writeReplace重載以完成更好的維護(hù)invariant controllers

    posted on 2005-10-18 15:07 閱讀(344) 評論(0)  編輯  收藏 所屬分類: J2se

    主站蜘蛛池模板: 综合亚洲伊人午夜网| 亚洲色婷婷综合开心网| 亚洲国产日韩在线成人蜜芽| 最近免费中文字幕MV在线视频3| 日韩色日韩视频亚洲网站| 你懂的免费在线观看| 久久久久亚洲AV无码专区桃色| 亚洲国产精品白丝在线观看| 中文字幕在线观看免费视频| 亚洲午夜成人精品电影在线观看| 性生大片视频免费观看一级| 99精品国产免费久久久久久下载| 国产亚洲精品成人a v小说| a毛片免费播放全部完整| 久久久久亚洲AV片无码| 亚洲另类无码专区丝袜| 男女午夜24式免费视频| 亚洲色欲久久久久综合网| sss在线观看免费高清| 国产l精品国产亚洲区在线观看| 亚洲精品无码日韩国产不卡av| 日韩a级毛片免费视频| 亚洲国产视频一区| 免费国产黄线在线观看 | 亚洲视频在线观看网址| 18禁免费无码无遮挡不卡网站| 亚洲美女在线国产| 无码人妻精品中文字幕免费| 亚洲高清中文字幕免费| 日韩精品电影一区亚洲| 亚洲av无码一区二区三区天堂| 日批日出水久久亚洲精品tv| 爱丫爱丫影院在线观看免费| 亚洲剧情在线观看| 亚洲日本中文字幕天堂网| 1000部国产成人免费视频| 国产成人亚洲毛片| 一本色道久久88亚洲综合| a毛片免费在线观看| 亚洲综合激情五月色一区| 国产专区一va亚洲v天堂|