Java IO流 05:对象流(序列化 & 反序列化)

一、对象流ObjectInputStream:对象字节输入流ObjectOutputStream:对象字节输出流序列化(Serialize):Java对象存储到硬盘文件中。将Java对象的状态保存下来的过程。反序列化(DeSerialize):将硬盘文件上的数据重新恢复到内存当中,恢复成Java对象。注:参与序列化和反序列化的对象,必须实现Serializable接口,不然会出现 java.io.NotSerializableException:(对象不支持序列化)通过源代码发现,Ser
摘要由CSDN通过智能技术生成

一、对象流

  • ObjectInputStream:对象字节输入流
  • ObjectOutputStream:对象字节输出流

    在这里插入图片描述

    • 序列化(Serialize):Java对象存储到硬盘文件中。将Java对象的状态保存下来的过程。
    • 反序列化(DeSerialize):将硬盘文件上的数据重新恢复到内存当中,恢复成Java对象。
      注:参与序列化和反序列化的对象,必须实现Serializable接口,不然会出现 java.io.NotSerializableException:(对象不支持序列化)
    • 通过源代码发现,Serializable接口只是一个标志接口,这个接口中什么代码都没有,它起到标识、标志的作用,Java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊待遇。
      ————Serializable这个标志接口是给Java虚拟机参考的,Java虚拟机看到这个接口之后,会为该类自动生成一个序列化版本号。
      public interface Serializable{
              }
      
    • 序列化的作用:
      • Java语言中是采用什么机制来区分类的:
        ————对于Java虚拟机来说,Java虚拟机是可以区分两个类名相同且实现了Serializable接口的类,因为这两个类都实现了Serializable接口,都有默认的序列化版本号,它们的序列化版本号不一样,所有就能区分开了。(实现Serializable接口会自动生成序列化版本号)
        1. . 首先通过类名进行比对,如果类名不一样,肯定不是同一个类。
        2. . 如果类名一样,靠序列化版本号进行区分。
      • 自动生成序列化版本号的缺陷:
        1. . 使用自动生成的序列化版本号,一旦代码确认之后,不能进行后续的修改。
          ————因为只要修改,就会重新编译,此时会生成一个全新的序列化版本号,这时Java虚拟机会认为这是一个全新的类,反序列化时就会出现异常。
      • 序列化使用总结:
        凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号,这样以后这个类即使代码修改了,但是序列化版本号不变,Java虚拟机会认为是同一个类。(案例如下)
          public class ArrayList<E> implements java.io.Serializable{
                   
          	private static final long serialVersionUID = 8683452581122892189L;
          }
        
  • 单个对象 序列化演示(ObjectOutputStream)和 反序列化演示(ObjectInputStream)
    public class ObjectOutputStreamTest01 {
         
        public static void main(String[] args) {
         
            Student chensi = new Student(1111, "chensi");
            ObjectOutputStream oos = null;
            try {
         
                oos = new ObjectOutputStream(new FileOutputStream
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值