博客
关于我
java序列化_java对象的序列化和反序列化
阅读量:790 次
发布时间:2023-01-24

本文共 1094 字,大约阅读时间需要 3 分钟。

序列化是将对象的状态保存下来,以便能够在后续恢复该状态或在其他系统中传输。这个过程类似于将复杂的实体数据转化为可传输的二进制流,方便在网络或文件中存储和传输。在Java中,对象序列化是将对象的属性按照特定的格式写入字节流,而反序列化则是将字节流中的数据解码成原来的对象。

要实现对象的序列化,首先需要让目标类实现[ Serializable ]接口。在Java中,默认情况下类的序列化版本会自动为[ serialVersionUID ]生成一个默认的值(通常是一个长整数),这在版本升级时会导致问题。此外,[ transient ]关键字可用于标记不需要序列化的字段,这些字段会被忽略掉。

举一个简单的例子:创建一个学生类实例并序列化它:

Student stu = new Student("001", "大狗", 20, Gender.男);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.obj"));oos.writeObject(stu);oos.close();

反序列化时,可以通过读取字节流并重建对象:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.obj"));Student student = (Student) ois.readObject();System.out.println(student.getName()); // 输出 "大狗"

需要注意的点:

  • 如果类中有自定义的[ serialVersionUID ],需要确保在升级时也更新这个值,否则反序列化会失败。
  • 使用[ transient ]修饰的字段不会被序列化。如果需要持久化所有字段,务必去掉[ transient ]标记。
  • 避免使用[ volatile ]字段,因为它们可能导致序列化过程中内存一致性的问题。
  • 在序列化和反序列化过程中,确保流的对象已经正确关闭,避免资源泄漏。
  • 反序列化时,如果类结构发生了变化(如字段类型或数量改变),反序列化时可能会抛出[ ClassNotFoundException ]或[ InvalidClassException ]。这时候需要检查目标类的定义,确保与序列化文件中的类版本匹配。

    总之,对象序列化是一种强大的持久化方法,能够方便地将复杂对象保存为字节流,实现数据的传输和存储。只要注意版本匹配和字段序列化管理,就能顺利实现反序列化的需求。

    转载地址:http://wleyk.baihongyu.com/

    你可能感兴趣的文章
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>
    可变长度参数
    查看>>
    cordova打包apk更改图标
    查看>>
    GitHub上传时,项目在已有文档时直接push出现错误解决方案
    查看>>
    文件系统的层次结构
    查看>>
    vue(渐进式前端框架)
    查看>>
    嵌入式系统试题库(CSU)
    查看>>
    java.security.InvalidKeyException: Illegal key size
    查看>>
    vue 错误收集
    查看>>
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>
    00013.05 字符串比较
    查看>>
    Effective Java 读书笔记
    查看>>
    访问servlet时弹出文件下载框解决方法
    查看>>
    IDEA-@Slf4j和log标签&@Data(Lombok)无效
    查看>>
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>
    cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
    查看>>
    Android 架构组件 – 让天下没有难做的 App
    查看>>
    能解决数据可视化大屏需求的3款可视化工具
    查看>>