zl程序教程

您现在的位置是:首页 >  Java

当前栏目

java序列化 教程

2023-04-18 15:26:55 时间

序列化的 条件:

序列化必须要满足两个条件:

1. 该对象必须实现 java.io.Serializble 接口

2. 改对象的所有属性必须是可序列化的,若有属性不可序列化也须注明是短暂的

 

注:检验一个类是否可以被序列化,可以检验该类是否实现 Serializble 接口

序列化的定义:

  把对象转换成可传输的字节序列的过程

 

反序列化的定义:

  把字节序列转还原对象的过程

 

为什么要序列化?

  最终目的地为了 跨平台存储 和 进行网络传输 而进行网络传输都是 IO 而进行IO所支持的还是 数组

 

序列化实例:

定义 student 类 并 实现了 java.io.Serializble 接口

public class studentDemo implements java.io.Serializable {
    public String name;
    public int phone;
    public String address;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPhone() {
        return phone;
    }
    public void setPhone(int phone) {
        this.phone = phone;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

 

 

------序列化------

 序列化成功之后会在当前路径创建 以 “张三”名字 为文件名的 .ser 的文件

序列化 需要用到 FileOutputStream() 文件输出流  和 ObjectOutputStream() 对象输出流 

使用 文件输出流 创建 文件路径和名称 再通过 对象流的 writeObjec()方法 写入到系统中

 

每次使用完 IO流 一定要记得 关闭流  close() 方法

public class SerializeDemo {
    public static void main(String[] args) {
        studentDemo stu = new studentDemo(); 
        stu.setName("张三");
        stu.setPhone( 1233467733 );
        stu.setAddress("江西");

        try {
            FileOutputStream fileOut = new FileOutputStream("student" + stu.name + ".ser"); // 创建 文件路径、文件名字
            ObjectOutputStream out = new ObjectOutputStream(fileOut); // 创建 对象输出流系统
            out.writeObject( stu ); // 写入需要的对象名
            fileOut.close(); // 关闭文件流
            out.close(); // 关闭对象输入流

            System.out.println( "---序列化对象成功---" );

        } catch ( IOException e) {
            e.printStackTrace(); // 出现异常 初始化try
        }
    }
}

 

-------反序列化-------

反序列化是将 序列化的文件的内容读取出来的过程,和序列化是相对的

需要使用到 FileInputStream() 文件输入流 和 ObjectInputStream() 对象输入流  再用对象流的 readObject() 读取文件中的内容

 

public class UnSerializble  {
    public static void main(String[] args) {
        String name = "张三";

        try {
            FileInputStream fileInt = new FileInputStream("student" + name + ".ser"); // 创建文件输入流
            ObjectInputStream ois = new ObjectInputStream( fileInt );  // 创建对象输入流 
            studentDemo stu = (studentDemo) ois.readObject(); // 读取的对象强制成为 studentDemo 类

            System.out.println("---反序列化内容---");
            System.out.println( "name:" + stu.getName() );
            System.out.println( "phone:" + stu.getPhone());
            System.out.println( "address:" + stu.getAddress());

            fileInt.close();
            ois.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}