對象專屬流

序列化和反序列化的理解

  • 序列化:Serialiaze java對象存儲到文件中。將java對象的狀態保存下來的過程。
  • 反序列化:DeSerialize 將硬盤上的數據重新恢復到內存當中,恢復成java對象
package com.lichennan.bean;

import java.io.Serializable;

public class Student implements Serializable {
    //java虛擬機看到Serializable接口之後,會自動生成一個序列化版本號。
    //這裏沒有手動寫出來,Java虛擬機會默認提供這個序列化版本號。
    private  int no;
    private  String name;
    public Student(){

    }

    public Student(int no, String name) {
        this.no = no;
        this.name = name;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }
}

序列化

package com.lichennan.io;

import com.lichennan.bean.Student;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/*
  1.java.io.NotSerializableException:
      Student對象不支持序列化
  2.參與序列化和反序列化的對象。必須實現Serializanble接口。
  3.注意:通過源代碼發現,Serializanble接口只是一個標誌接口:
 public interface Serializable {
  }
  這個接口當中什麼代碼都沒有,起到一個標識標記的作用。
 */
public class ObjectOutputStreamTest01 {
    public static void main(String[] args) throws  Exception {
        //創建java對象
        Student s = new Student(1111,"李臣楠");
        //序列化
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students"));
        //序列化對象
        oos.writeObject(s);
        oos.flush();
        oos.close();
    }
}

反序列化

package com.lichennan.io;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

/*
 反序列化
 */
public class ObjectInputStreamTest01 {
    public static void main(String[] args) throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students"));
        //開始反序列化,讀
        Object obj = ois.readObject();
        //反序列化回來時一個學生對象,所以會調用學生的toString方法
        System.out.println(obj);
        ois.close();
    }
}

在這裏插入圖片描述

序列化多個對象

package com.lichennan.bean;

import java.io.Serializable;

public class User implements Serializable {
    private int no;
    //transient 關鍵字表示遊離的,不參與序列化。
    //private transient String name;使name不參與序列化操作
    private String name;

    public User() {
    }

    public User(int no, String name) {
        this.no = no;
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

序列化

package com.lichennan.bean;

import java.io.Serializable;

public class User implements Serializable {
    private int no;
    private String name;

    public User() {
    }

    public User(int no, String name) {
        this.no = no;
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "no=" + no +
                ", name='" + name + '\'' +
                '}';
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

反序列化

package com.lichennan.io;

import com.lichennan.bean.User;

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.List;

/*
  反序列化集合
 */
public class ObjectInputStreamTest02 {
    public static void main(String[] args) throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users"));
//        Object obj = ois.readObject();
//        System.out.println(obj instanceof List);
        List<User> userList = (List<User>)ois.readObject();
        for (User user:userList) {
            System.out.println(user.toString());
        }
        ois.close();
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章