您的位置:

Java序列号使用指南

一、什么是Java序列号

Java 序列号是将一个对象转换成字节序列的过程,以便进行持久化,网络传输或者程序间的数据交换。

对 Java 对象进行序列化的代码通常使用 java.io 库中的 ObjectOutputStream 类。

二、如何对Java对象进行序列化

1、实现 java.io.Serializable 接口。该接口为空接口,它的目的是表明类的对象可以被序列化。如果不实现 Serializable 接口,将在运行时抛出 NotSerializableException。

public class Student implements java.io.Serializable {
    private String name;
    private int age;

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

2、使用 ObjectOutputStream 对象的 writeObject 方法。以下是将 Student 对象写入文件的示例:

try {
    FileOutputStream fos = new FileOutputStream("student.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    Student student = new Student("Tom", 18);
    oos.writeObject(student);
    oos.close();
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

三、如何反序列化对象

1、使用 ObjectInputStream 对象的 readObject 方法。以下是从文件中读取 Student 对象的示例:

try {
    FileInputStream fis = new FileInputStream("student.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    Student student = (Student) ois.readObject();
    System.out.println(student.getName() + ", " + student.getAge());
    ois.close();
    fis.close();
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}

四、注意事项

1、序列化过程中,所有字段都被序列化,包括私有字段和 final 字段。

2、如果一个类的某个字段不想被序列化,可以使用 transient 修饰该字段。

3、序列化的类和反序列化的类必须是同一个类。如果两者不匹配,会抛出 InvalidClassException。

4、Java默认的序列化机制不够灵活,如果需要更灵活的序列化方式,可以考虑使用第三方开源库,如 Google 的 ProtoBuf。

五、总结

Java 序列化是一种将对象转换成字节流的过程。通过实现 Serializable 接口,使用 ObjectOutputStream 和 ObjectInputStream 可以实现对象的序列化和反序列化。

需要注意的是,序列化的类和反序列化的类必须是同一个类,并且默认的序列化机制存在一些局限性,适用场景较为受限。