当前位置: 首页 > 工具软件 > java-bible > 使用案例 >

面试之Java圣经10

段干弘扬
2023-12-01

序列化在网络传输的过程中是一个重要的部分

一、序列化和反序列化?

        序列化是一种对象持久化的手段,普遍在网络传输,RMI(远程调用)等场景中应用。

        Java平台允许我们在内存中创建可复用的Java对象,这些对象的存在只在JVM运行期间。但在实际应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。

        Java对象序列化可以把对象的状态保存为一组字节码,在使用时再将这些字节组装成对象(反序列化)。

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

        在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化                         ObjectOutputStream:IO 类,包含序列化对象的方法,writeObject()

   ObjectInputStream: IO 类,包含反序列化对象的方法,readObject()

   serialVersionUID类属性,序列化版本号,用于给 JVM 区别同名类,没有提供版本号,JVM会默认提供序列化版本号。

        transient,关键字,当序列化时,不希望某些属性参与,则可以使用这个关键字标注该属性。

定义对象

public class person implements Serializable {
    private String name;
    private int age;
    private static final long serialVersionUID = -6849794470754667710L;
    //  以下省略有参构造、无参构造、set、get、toString
}

序列化

public static void main(String[] args) throws Exception {
    //  创建 Java 对象
     Person person = new Person("张三",18);
    //  对象输出流
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person "));
    // 使用 writeObject 序列化对象
    oos.writeObject(person);
    // 刷新
    oos.flush();
    //  关闭流
    oos.close();
}

反序列化

public static void main(String[] args) throws Exception {
    //  对象输入流
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person"));
    //  使用 readObject() 反序列化  
    Object obj = ois.readObject();
    //  使用对象
    System.out.println(obj);
    //  关闭流
    ois.close();
}

总结

序列化和反序列化只是为了保存对象在某一时刻的状态将其持久化。

 类似资料: