zoukankan      html  css  js  c++  java
  • 对象流--对象的序列化

    1、对象是存在于内存中的(堆内存),有时候我们需要将对象保存在硬盘上,又有时我们需要将对象保存在另一台计算机上等等这样的操作,

          这时候我们需要将对象转化为一个字节序列,而这个过程就是对象的序列化,相反我么又这样一个字节序列需要将其转化为对应的对象,

          这个过程就是对象的反序列化。

    2、对象-----序列化---字节序列

         字节序列---反序列化---对象

    3、使用OOS实现对象的序列化------ObjectOutputStream是用来对对象进行序列化的输出流,

          其实现对象序列化的方法为:  -void  writeObject(Object  o)

          该方法可以将给定的对象转化为一个字节序列后写出,

    4、使用 OIS实现对象的反序列化---ObjectInputStream是用来对对象进行反序列化的输入流,

         其实现对象反序列化打方法为: -Object  readObject()

         该方法 可以从流中读取字节并转化为对象

    5、Serialiable接口

          ObjectOutputSream在对对象进行序列化时有一个要求,就是需要序列化的对象所属的类必须实现Serialiable接口,

          实现该接口不需要实现任何方法,其只是作为可序列化的标志,

          通常实现该接口的类,需要提供一个常量serialVersionUid,表名该类的版本,若不显示的声明,在对象序列化时也会根据当前类的各个方面计算该类的默认serialVersionUid,

          但不同平台编译器实现有所不同,所以如果想跨平台,都应有显示的声明版本号。

    6、Serialiable接口

          如果声明的类的对象序列化存到硬盘上面,之后随着需求的变化更改了类的属性(增加或减少或更改)呢么反序列化时就会出现InvalidClassException,这样就会造成不兼

         容问题,但当serialVersionUid相同时,它就会将不一样的field以type的预设值反序列化,可避免不兼容问题。

         

          

          

  • 相关阅读:
    Powerdesigner中如何生成测试数据
    iBatis #和$的区别 把int作为参数时,转换为字符型
    config或者xml中的embedded使用方法。
    C#中发送邮件
    ASP.NET中JSON的序列化和反序列化
    AspNetPager.dll 实现分页
    oracle创建表空间
    如何进行数据库,比如ORACLE,SQL SERVER的逆向工程,将数据库导入到PD中
    DataTable转换成JSON字符串的函数
    iBatis把一个表的sqlmap配置的多个xml中。
  • 原文地址:https://www.cnblogs.com/sunfenqing/p/7481736.html
Copyright © 2011-2022 走看看