java序列化和反序列化

序列化概念:java提供了一種對象序列化的機制,該機制中,一個對象能夠被表示爲一個字節序列,該字節序列包括該對象的數據,有關對象的類型的信息和存儲在對象中數據的類型。java

反序列化概念:把字節恢復爲對象的過程叫反序列化。spa

類ObjectInputStream和ObjectOutputStream包含了序列化和反序列化對象的方法。code

 

一個類要想序列化成功,必須知足兩個條件:對象

該類必須實現java.io.SeriaAlizable;blog

該類的全部屬性必須是可序列化的,若是一個屬性不是可序列化的,則該屬性必須註明是短暫的。接口

示例:it

SerializeDemo.java文件:用ObjectOnputStream實現序列化io

import java.io.*;
public class SerializerDemo { 

    public static void main(String [] args)
    {
        Employee e = new Employee();
        e.name = "Ali";
        e.address = "yi";
        e.SSN = 123456;
        e.number = 11545;
        try {
            //文件輸出流(FileOutputStream):FileOutputStream用於寫入原始字節流,如圖像數據。當序列化一個對象到文件時, 按照 Java 的標準約定是給文件一個 .ser 擴展名
            FileOutputStream fileOut = new FileOutputStream("C:/Users/July/Desktop/test/1.ser");
            //ObjectOutputStream 類用來序列化一個對象
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(e);
            out.close();
            fileOut.close();
            System.out.printf("成功序列化");
        }catch(IOException i)
        {
            i.printStackTrace();
        }
    }
}

 employee.java文件:class

import java.io.Serializable;

//建立接口
class Employee implements Serializable{
    public String name;
       public String address;
       public transient int SSN;
       public int number;
       
}

反序列化:用ObjectInputStream實現反序列化test

import java.io.*;
public class DeserializeDemo {

    public static void main(String[] args) throws ClassNotFoundException {
        Employee e = null;
        try {
            FileInputStream fileIn = new FileInputStream("C:/Users/July/Desktop/test/1.ser");
            ObjectInputStream  in = new ObjectInputStream(fileIn);
            e = (Employee) in.readObject();
            in.close();
            fileIn.close();
        }catch(IOException i)
        {
            i.printStackTrace();
            return;
        }catch(ClassNotFoundException c)
        {
            System.out.println("Emplyoee類沒有發現");
            c.printStackTrace();
        }
        System.out.println("執行。。。。。");
        System .out .println("Name:" + e.name );
        System .out .println("Address:" + e.address  );
        System .out .println("SSN:" + e.SSN  );
        System .out .println("Number:" + e.number );
    }

}
相關文章
相關標籤/搜索