Java——序列化与反序列化


序列化

序列化是什么?

将对象的状态存储到特定存储介质的过程。
将Java对象转换为字节序列。
这里写图片描述

如何实现对象序列化?

实现接口serializable
这里写图片描述

实战练习:

public class BookManager {

    //序列化:写入.   把对象写入二进制文件中,前提必须实现序列化接口
    public static void serial(Book book){
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("D:/IoFile/serial/book.txt"));
            //实现序列化
            oos.writeObject(book);
            System.out.println("序列化成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(oos!=null){
                    oos.flush();
                    oos.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    //反序列化:文件--->程序  输入     把二进制文件读取成对象
    public static Book unSerial(){
        ObjectInputStream ois =null;
        Book book = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("D:/IoFile/serial/book.txt"));
            book = (Book) ois.readObject();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(ois!=null){
                    ois.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return book;
    }
    public static void main(String[] args) {
//      Book book=new Book(1, "哈利波特");
//      serial(book);
        Book book=unSerial();
        System.out.println(book.getName());
    }
}

其实体类Book类实现Serializable接口:

import java.io.Serializable;

/**
 * 序列化  
 * 作用:把对象保存至二进制文件
 * @author 爱是与世界平行
 *
 */
public class Book implements Serializable{
    private int id;
    private String name;
    public Book(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
}

Serializable

  • 要想实现序列化(文件写入)或者反序列化(文件读取),必须实现Serializable接口。

  • 重写 readObject(ObjectInputStream in) 和 writeObject(ObjectOutputSteam
    out) 方法,则调用这两个方法进行序列化或反序列化。

  • 带 readObject() 和 writeObject() 方法的序列化和反序列化
    这两个方法可以在序列化和反序列化时定制用户的行为,即使它们被生命为private,但这丝毫不影响它们的作用。

  • 实际上,ObjectInputStream和ObjectOutputStream通过反射来寻找对象是否实现了这两个方法


反序列化

将文件中的内容读取出来。

这里写图片描述


总结

使用Reader读取文件内容1:

这里写图片描述

使用Reader读取文件内容2:

这里写图片描述

原文地址:https://www.cnblogs.com/aixing/p/13327728.html