【Java杂记 02】关于Serializable(序列化)接口

    技术2025-08-22  12

    【Java杂记 02】关于Serializable(序列化)接口

    什么是序列化?为什么要序列号?序列化的特点及注意事项如何序列化?

    什么是序列化?

    把原本在内存中的对象状态 变成可存储或传输的过程称之为序列化。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

    序列化前的对象和反序列化后得到的对象,内容是一样的(且对象中包含的引用也相同),但两个对象的地址不同。换句话说,序列化操作可以实现对任何可Serializable对象的”深度复制(deep copy)"。

    为什么要序列号?

    在以下几种情况时,需要序列化:

    当你想把的内存中的对象状态保存到一个文件中或者数据库中,以便可以在以后重新创建精确的副本;当你想用套接字在网络上传送对象的时候(从一个应用程序域发送到另一个应用程序域中);当你想通过RMI传输对象的时候;

    序列化的特点及注意事项

    序列化时,只对对象的状态进行保存,而不管对象的方法当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化并非所有的对象都可以序列化序列化会忽略静态变量,即序列化不保存静态变量的状态。静态成员属于类级别的,不能序列化。添加了static、transient关键字后的变量不能序列化

    如何序列化?

    Serializable是标识接口,没有任何需要实现的方法

    1. 实现Serializable接口 2. 创建FileOutputStream(输出流)对象fos 3. 通过输出流对象fos创建一个对象输出流

    就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流

    public static void main(String[] args) { Person person = new Person( try { //序列化 System.out.println(person); ObjectOutputStream oos= new ObjectOutputStream(new FileOutputStream("data.txt")); oos.writeObject(person ); //通过对象输出流,将label写入流中 oos.close(); //反序列化 ObjectInputStream ois= new ObjectInputStream(new FileInputStream("person .txt")); person = (Person ) ois.readObject(); ois.close(); System.out.println(person); } catch (Exception e) { e.printStackTrace(); } }
    Processed: 0.019, SQL: 10