zoukankan      html  css  js  c++  java
  • 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:

    这里写图片描述

  • 相关阅读:
    sql月,年,统计报表sql报表
    Sql server在cmd下的使用
    c# 批量处理数据录入
    vmware安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题
    以太坊去中心化淘宝智能合约案例
    智能合约入门
    智能资产构建去中心化的资产管理系统
    以太坊搭建联盟链
    web 前端
    EasyUI+bootsrtap混合前端框架
  • 原文地址:https://www.cnblogs.com/aixing/p/13327728.html
Copyright © 2011-2022 走看看