对象流序列号与反序列号

/*
       序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream
     */
    @Test
    public void test5() throws IOException {
        FileOutputStream fos = new FileOutputStream("hello.dat");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeUTF("java学习中");
        oos.flush();//刷新操作

        oos.writeObject(new Person("张三",20));
        oos.flush();
        oos.close();
    }

    /*
        反序列化:将磁盘文件中的对象还原为内存中的一个java对象
        使用ObjectInputStream
     */
    @Test
    public void test6() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("hello.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);

        Object o = ois.readUTF();
        Object o1 = ois.readObject();

        String str = (String)o;
        System.out.println(str);
        System.out.println(o1);
        ois.close();
    }

  

Person类序列化需要满足以下条件:

1.需要实现接口Serializable 

2.当前类提供一个常量:serialVersionUID 

3.除了当前Person类需要实现Serializable 接口之外,还必须保证其内部的所有属性也必须是可序列号的(默认情况下,基本数据类型可序列号)

ObjectOutputStream 、ObjectInputStream 不能序列化static和transient修饰的成员变量

 

public class Person implements Serializable {
    private static final long serialVersionUID = -68494470754667710L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

  

 

posted @ 2022-09-02 21:39  Mr_sven  阅读(33)  评论(0编辑  收藏  举报