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

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

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

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

    Serializable java序列化

    1、實現Serializable回導致發布的API難以更改,并且使得package-private和private 這兩個本來封裝的較好的咚咚也不能得到保障了 2、Serializable會為每個類生成一個序列號,生成依據是類名、類實現的接口名、 public和protected方法,所以只要你一不小心改了一個已經publish的API,并且沒有自 己定義一個long類型的叫做serialVersionUID的field,哪怕只是添加一個getXX,就會 讓你讀原來的序列化到文件中的東西讀不出來(不知道為什么要把方法名算進去?) 3、不用構造函數用Serializable就可以構造對象,看起來不大合理,這被稱為 extralinguistic mechanism,所以當實現Serializable時應該注意維持構造函數中所維 持的那些不變狀態 4、增加了發布新版本的類時的測試負擔 5、1.4版本后,JavaBeans的持久化采用基于XML的機制,不再需要Serializable 6、設計用來被繼承的類時,盡量不實現Serializable,用來被繼承的interface也不要 繼承Serializable。但是如果父類不實現Serializable接口,子類很難實現它,特別是 對于父類沒有可以訪問的不含參數的構造函數的時候。所以,一旦你決定不實現 Serializable接口并且類被用來繼承的時候記得提供一個無參數的構造函數 7、內部類還是不要實現Serializable好了,除非是static的,(偶也覺得內部類不適合 用來干這類活的) 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} 這樣會導致鏈表的每個元素以及元素之間的關系(雙向鏈表之間的連接)都保存下來,更好的方法是提供一個自定義的序列化如下: //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重載以完成更好的維護invariant controllers

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

    主站蜘蛛池模板: 91视频精品全国免费观看| 亚洲AV无码男人的天堂| 久久免费精品一区二区| 亚洲精品视频免费| 黄色网页在线免费观看| 亚洲日本一区二区三区在线不卡| 麻豆一区二区三区蜜桃免费| 免费一级肉体全黄毛片| 午夜亚洲国产精品福利| MM131亚洲国产美女久久| 二个人看的www免费视频| 亚洲va无码专区国产乱码| 2021精品国产品免费观看| 色播亚洲视频在线观看| 最近免费视频中文字幕大全| 亚洲av乱码一区二区三区| 成人免费无码大片a毛片软件| 亚洲av第一网站久章草| 亚洲国产精品一区二区第一页免 | 亚洲一卡二卡三卡四卡无卡麻豆| 三年片在线观看免费大全| 亚洲aⅴ无码专区在线观看 | 亚洲精品成人网站在线播放| 免费在线看v网址| 国产AV无码专区亚洲AV蜜芽| 亚洲人AV永久一区二区三区久久| 久久精品免费网站网| 91亚洲精品视频| 国产国产人免费视频成69大陆| 国产特黄特色的大片观看免费视频| 午夜亚洲AV日韩AV无码大全| 男人的好看免费观看在线视频| 九九免费观看全部免费视频| 久久亚洲美女精品国产精品| 日本免费人成黄页在线观看视频 | j8又粗又长又硬又爽免费视频 | 永久免费av无码入口国语片| 亚洲国产美女视频| 亚洲国产电影av在线网址| 久久精品无码专区免费青青| 噜噜综合亚洲AV中文无码|