java学习笔记_进阶015

序列化和反序列化

  • 序列化和反序列化
    • 将内存中的java对象-数据信息传输到硬盘文件,,,这个过程叫做序列化Serialize( 拆分对象)。java对象存储到文件中,将java对象的状态保存下来的过程-----ObjectOutputStream
    • 将硬盘文件中的java对象-数据信息恢复到内存中,,,,,这个过程叫做反序列化DeSerialize(组装对象)。将硬盘上的数据重新恢复到内存当中,恢复成java对象----- ObjectInputStream
  • 序列化的实现
  • 反序列化的实现
  • 参与序列化和反序列化的对象,必须实现Serializable接口
    • 注意:通过源代码发现,Serializable接口只是一个标志接口
      “”"
      public interface Serializable {
      }
      “”"
      这个接口当中什么代码都没有,起到一个标识、标志的作用,java虚拟机看到这个类实现了这个接口,可能会对这个类进行特殊处理。
      Serializable这个标志接口是给java虚拟机参考的,java虚拟机看到这个接口之后,会为该类自动生成一个序列化版本号,这里没有手动写出来,java虚拟机会默认提供这个序列化版本号
  • 序列化多个对象
    • 可以,可以将对象放到集合当中,序列化集合。
    • 提示
      • 参与序列化的ArrayList集合以及集合中的元素都需要实现java.io.Serializable接口
  • transient关键字
    • 为了将某个关键字不序列化,可以采用transient.
    • transient表示游离,不参与序列化。例如private transient String name;//name不参与序列化
  • 序列化版本号的作用
    • 假如原先写了一个类,过了很久,这个类源代码改动了。源代码改动之后,需要重新编译,编译之后生成了全新的字节码文件。并且class文件再次运行的时候,java虚拟机生成的序列化版本号也会发生相应的改变
    • java语言中是采用什么机制来区分的?
      • 第一:首先通过类名进行比对,如果类名不一样,肯定不是同一类
      • 第二:如果类名一样,再怎么进行类的区别?靠序列化版本号进行区分
    • 小明写了a类,小华写了a类。对于java虚拟机来说,java虚拟机是可以区分开这两个类的,因为这两个类都实现了Serializable接口,都有默认的序列化版本号,他们的序列化版本号是不一样,所以区分开了。(这是自动生成序列化版本号的好处
      • 自动生成序列化版本号的缺陷?
        • 这种自动生成的序列化版本号缺点是:一旦代码确定之后,不能进行后续的修改。因为只要修改,必然会重新编译,此时会生成全新的序列化版本号。这个时候java虚拟机会认为这是一个全新的类。(这样就不好了)
    • 最终结论
      • 凡是一个类实现了Serializable接口,建议给该类提供一个固定不变的序列化版本号。这样,以后这个类即使代码修改了,但是版本号不变,java虚拟机会认为是同一个类。
      • eg:
        • private static final long serialVersionUID = 1L; //java虚拟机识别一个类的时候先通过类名,如果类名一致,在通过序列化版本号

IO和Properties联合使用

  • IO和Properties联合使用
    • IO流:文件的读和写
    • Properties:是一个Map集合,key和value都是String类型
    • 以后经常改变的数据,可以单独写到一个文件中,使得程序动态读取,将来只需要修改这个文件的内容,java代码不需要改动,不需要重新编译,服务器也不需要重启,就可以拿到动态的信息。------配置文件
    • 当配置文件中的内容格式为key=value的时候,将这种配置文件叫做属性配置文件
    • java规范中要求:属性配置文件建议以.properties结尾,但这不是必须的。
    • 这种以.properties结尾的文件在java中被称为:属性配置文件。其中Properties对象是专门存放属性配置文件内容的一个类
    • 在属性配置文件中,#号是注释
    • 在属性配置文件中,key和value之间最好不要有空格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__BC__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值