真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Serializable接口

什么是java序列化,如何實現(xiàn)?
   序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內(nèi)容進行流化??梢詫α骰蟮膶ο筮M行讀寫操作,也可將流化后的對象傳輸于網(wǎng)絡之間。
   序列化是為了解決在對 對象進行讀寫操作時所引發(fā)的問題。
   序列化的實現(xiàn):將需要被序列化的類實現(xiàn)Serializable接口,該接口沒有需要被實現(xiàn)的方法,implement Serializable只是為了標注該對象是可被序列化的,然后使用
         一個輸出流(如:fileOutputStream)來構(gòu)造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject方法就可以
         將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復的話則利用輸入流。
SerialVersionUID--下面簡稱SUID
其實序列化的作用是能轉(zhuǎn)化成Byte流,然后又能反序列化成原始的類。能在網(wǎng)絡進行傳輸,也可以保存在磁盤中,有了SUID之后,那么如果序列化的類已經(jīng)保存了在本地中,中途你更改了類后,SUID變了,那么反序列化的時候就不會變成原始的類了,還會拋異常,主要就是用于版本控制。
SUID:IDE一般會幫你自動生成,其實這個值你可以自己設定,只要保證id值唯一就好。你可以理解成唯一標識。
serialVersionUID是用于記錄class文件的版本信息的,serialVersionUID這個數(shù)字是通過一個類的類名、成員、包名、工程名算出來的。
使用ObjectInputStream 反序列化的時候,ObjectInputStream會先讀取文件中的serialVersionUID,然后與本地的class文件的serialVersionUID進行對比,如果這兩個id不一致,那么反序列化就失敗了。
對象的輸入輸出流,主要的作用是用于寫對象與讀取對象的信息。對信息一旦寫到文件上那么對象的信息就可以持久化了
Serializable接口
package com.io.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.*;
import java.util.*;public class Test implements Serializable {//Serializable接口沒有任何方法,只是一個標識接口
    public static void main(String[] args) throws Exception {        new Test().test();
    } 
    private void test() throws FileNotFoundException, IOException, ClassNotFoundException {
        Map map = new HashMap();
        map.put(1, new Film("變形金剛", 20));
        map.put(2, new Film("鋼鐵俠", 30));
        map.put(3, new Film("復仇者聯(lián)盟", 40)); /*,序列化其實就是將film的相關(guān)信息轉(zhuǎn)化為二進制存儲在了map.txt這個文件中,那么用文本編輯器打開查看的話當然是會出現(xiàn)亂碼的。只有通過反序列化才能將存儲的二進制讀取出來,然后正常顯示在控制臺上。*/
        ObjectOutputStream oos =  new ObjectOutputStream(new FileOutputStream("map.txt"));
        oos.writeObject(map);
        oos.close();         
     /*反序列化*/
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("map.txt"));
        Map m = new HashMap();
        m = (Map) ois.readObject();
        ois.close();
        System.out.println(m.toString());
    }    class Film implements Serializable {        //先執(zhí)行序列化方法 唯一標識是1L  然后改成2L后   反序列化輸出會報錯
        private static final long serialVersionUID = 1L;        private String name;        private int duration; 
        public Film(String name, int duration) {            this.name = name;            this.duration = duration;
        }        public String getName() {            return name;
        }        public void setName(String name) {            this.name = name;
        }        public int getDuration() {            return duration;
        }        public void setDuration(int duration) {            this.duration = duration;
        }        public Film() {
        }
        @Override        public String toString() {            return "Film{" +                    "name='" + name + '\'' +                    ", duration=" + duration +                    '}';
        }
    }
}
Serializable接口

 

站在用戶的角度思考問題,與客戶深入溝通,找到薩嘎網(wǎng)站設計與薩嘎網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡空間、企業(yè)郵箱。業(yè)務覆蓋薩嘎地區(qū)。

對象輸入輸出流要注意的細節(jié)

  1. 如果對象需要被寫到文件上,那么對象所屬的類必須實現(xiàn)Serializable接口,Serializable接口沒有任何方法,只是一個標識接口。
  2. 對象的反序列化創(chuàng)建對象的時候并不會調(diào)用到構(gòu)造方法的。
  3. serialVersionUID是用于記錄class文件的版本信息的,serialVersionUID這個數(shù)字是通過一個類的類名、成員、包名、工程名算出來的。
  4. 使用ObjectInputStream 反序列化的時候,ObjectInputStream會先讀取文件中的serialVersionUID,然后與本地的class文件的serialVersionUID進行對比,如果這兩個id不一致,那么反序列化就失敗了。
  5. 如果序列化與反序列化的時候可能會修改類的成員,那么最好一開始就給這個類指定一個serialVersionUID,如果一個類制定了serialVersionUID,然后再序列化和反序列化的時候,jvm都不會再自己算這個serialVersionUID
  6. 如果一個對象某個數(shù)據(jù)不想被序列化到硬盤上,可以使用關(guān)鍵字transient修飾
  7. 如果一個類維護了另外一個類的引用,那么另外一個類也需要實現(xiàn)Serializable接口
你們都是有經(jīng)驗的開發(fā)人員

http://shenzhen.offcn.com/


網(wǎng)站標題:Serializable接口
URL分享:http://weahome.cn/article/gpojeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部