• 注册
  • 后端开发博客 后端开发博客 关注:0 内容:2356

    重学Java-序列化

  • 查看作者
  • 打赏作者
  • 当前位置: 职业司 > 后端开发 > 后端开发博客 > 正文
    • 后端开发博客
    • 什么是序列化与反序列化

      序列化是将对象转换为可传输格式的过程。是一种数据的持久化手段,与只相反的称为反序列化。

      Java中的序列化与反序列化

      相关的类

      • java.io.Serializable
      • java.io.Externalizable

      Serializable

      类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义

      Externalizable

      Externalizable继承了Serializable, 该接口中定义了两个抽象⽅法:writeExternal()readExternal()。 当使⽤Externalizable接口来进⾏序列化与反序列化的时候需要开发⼈员重写writeExternal()与readExternal()⽅法,如果没有重写,则所有字段将会被设置为默认值,实现Externalizable, 并实现writeExternal()readExternal()⽅法可以指定序列化哪些属性

      serialVersionUID

      虚拟机是否允许反序列化, 不仅取决于类路径和功能代码是否⼀致, ⼀个⾮常重要的⼀点是两个类的序列化 ID 是否⼀致, 即serialVersionUID要求⼀致,在进⾏反序列化时, JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进⾏⽐较, 如果相同就认为是⼀致的, 可以进⾏反序列化, 否则就会出现序列化版本不⼀致的异常, 即是InvalidCastException。这样做是为了保证安全, 因为⽂件存储中的内容可能被篡改。当实现java.io.Serializable接口的类没有显式地定义⼀个serialVersionUID变量时候, Java序列化机制会根据编译的Class⾃动⽣成⼀个serialVersionUID作序列化版本⽐较⽤, 这种情况下, 如果Class⽂件没有发⽣变化, 就算再编译多 次, serialVersionUID也不会变化的。但是, 如果发⽣了变化,那么这个⽂件对应的serialVersionUID也就会发⽣变化。

      请登录之后再进行评论

      登录

      手机阅读天地(APP)

      • 微信公众号
      • 微信小程序
      • 安卓APP
      手机浏览,惊喜多多
      匿名树洞,说我想说!
      问答悬赏,VIP可见!
      密码可见,回复可见!
      即时聊天、群聊互动!
      宠物孵化,赠送礼物!
      动态像框,专属头衔!
      挑战/抽奖,金币送不停!
      赶紧体会下,不会让你失望!
    • 实时动态
    • 签到
    • 做任务
    • 发表内容
    • 偏好设置
    • 到底部
    • 帖子间隔 侧栏位置:
    • 还没有账号?点这里立即注册