1. 程式人生 > >java基礎之java的序列化

java基礎之java的序列化

什麼是java的序列化?

物件序列化機制(object serialization)是Java語言內建的一種物件持久化方式,通過物件序列化,可以把物件的狀態儲存為位元組陣列,並且可以在有需要的時候將這個位元組陣列通過反序列化的方式再轉換成物件

用自己的話講來說:
序列化 (Serialization)是將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程。一般將一個物件儲存至一個儲存媒介,例如檔案或是記億體緩衝等。在網路傳輸過程中,可以是位元組或是XML等格式。而位元組的或XML編碼格式可以還原完全相等的物件。這個相反的過程又稱為反序列化

序列化是幹什麼的?

簡單說就是為了儲存在記憶體中的各種物件的狀態,並且可以把儲存的物件狀態再讀出來。雖然你可以用你自己的各種各樣的方法來儲存Object States,但是Java給你提供一種應該比你自己好的儲存物件狀態的機制,那就是序列化

什麼情況下需要序列化

a)當你想把的記憶體中的物件儲存到一個檔案中或者資料庫中時候;
b)當你想用套接字在網路上傳送物件的時候;
c)當你想通過RMI傳輸物件的時候;

序列化儲存檔案例子

public class 序列化和反序列化 {


    public static void main(String[] args) {

    }
    //注意,內部類不能進行序列化,因為它依賴於外部類
    @Test
    public void test() throws IOException {
        A a = new A();
        a.i = 1;
        a.s = "a";
        FileOutputStream fileOutputStream = null;
        FileInputStream fileInputStream = null;
        try {
            //將obj寫入檔案
            fileOutputStream = new FileOutputStream("temp");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
            objectOutputStream.writeObject(a);
            fileOutputStream.close();
            //通過檔案讀取obj
            fileInputStream = new FileInputStream("temp");
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            A a2 = (A) objectInputStream.readObject();
            fileInputStream.close();
            System.out.println(a2.i);
            System.out.println(a2.s);
            //列印結果和序列化之前相同
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class A implements Serializable {

    int i;
    String s;
}