序列化以及反序列化

来源:互联网 发布:月薪8000能招到java 编辑:程序博客网 时间:2024/06/05 02:14

序列化

      • 序列化
        • 序列化是什么
        • 如何实现对象序列化
        • 实战练习
      • Serializable
      • 反序列化
      • 总结
        • 使用Reader读取文件内容1
        • 使用Reader读取文件内容2

序列化是什么?

将对象的状态存储到特定存储介质的过程。
将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:

这里写图片描述

原创粉丝点击