Java学习——对象的序列化和反序列化(对象流)

166 阅读1分钟

序列化

import java.io.*;

public class TestObjectInputOutputStream {
    //对象的序列化过程,将内存的对象通过ObjectOutputStream转换为二进制流,存在硬盘中
    public static void main(String[] args) {
        Person person1 = new Person("小明", 16);
        Person person2 = new Person("小七", 18);
        ObjectOutputStream objectOutputStream = null;
        try {
            objectOutputStream = new ObjectOutputStream(new FileOutputStream("person"));
            objectOutputStream.writeObject(person1);
            objectOutputStream.flush();
            objectOutputStream.writeObject(person2);
            objectOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                assert objectOutputStream != null;
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

反序列化

import java.io.*;

public class TestObjectInputOutputStream2 {
    //    对象的反序列化过程,将硬盘中文件二进制流通过ObjectOutputStream转换为相应对象
    public static void main(String[] args) {
        ObjectInputStream objectInputStream = null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream("person"));
            Person person1 = (Person) objectInputStream.readObject();
            System.out.println(person1);
            Person person2 = (Person) objectInputStream.readObject();
            System.out.println(person2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (objectInputStream != null) {

                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

实现序列类化的要求

  • 1.要实现Serializable接口或Enternalizable接口
  • 2.类的属性也要实现erializable接口或Enternalizable接口
  • 3.提供一个版本号private static final long serialVersionUID
  • 4.使用static或transient修饰的属性不可序列化