首页 > Java > java教程 > 正文

在Java中如何使用ObjectInputStream和ObjectOutputStream进行对象序列化_对象流常用类库

P粉602998670
发布: 2025-11-16 18:14:58
原创
993人浏览过
答案:ObjectInputStream和ObjectOutputStream用于Java对象序列化与反序列化,要求类实现Serializable接口,使用transient修饰非序列化字段,显式定义serialVersionUID;通过writeObject和readObject方法实现对象持久化与恢复,注意static和transient字段不参与序列化,反序列化不调用构造方法。

在java中如何使用objectinputstream和objectoutputstream进行对象序列化_对象流常用类库

在Java中,ObjectInputStreamObjectOutputStream 是用于实现对象序列化和反序列化的核心类。它们允许将Java对象转换为字节流,便于存储到文件或通过网络传输,并能从字节流中恢复原始对象。

对象序列化的基本要求

要使一个对象可序列化,必须满足以下条件:

  • 类必须实现 java.io.Serializable 接口(标记接口,无需实现方法)
  • 对象的所有成员变量也必须是可序列化的,否则需要使用 transient 关键字修饰
  • serialVersionUID 建议显式定义,避免版本不兼容问题

示例类:

<font face="Courier New,Courier,monospace">public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    private transient String password; // 不参与序列化

    public Person(String name, int age, String password) {
        this.name = name;
        this.age = age;
        this.password = password;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + ", password='" + password + "'}";
    }
}</font>
登录后复制

使用ObjectOutputStream写入对象

通过 ObjectOutputStream 可以将对象写入输出流,通常结合文件流使用。

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

北极象沉浸式AI翻译 0
查看详情 北极象沉浸式AI翻译

立即学习Java免费学习笔记(深入)”;

<font face="Courier New,Courier,monospace">try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.obj"))) {
    Person person = new Person("张三", 25, "123456");
    oos.writeObject(person);
    System.out.println("对象已序列化保存");
} catch (IOException e) {
    e.printStackTrace();
}</font>
登录后复制
  • writeObject(Object obj) 方法将对象写入底层流
  • 建议使用 try-with-resources 自动关闭资源

使用ObjectInputStream读取对象

通过 ObjectInputStream 可以从输入流中恢复对象。

<font face="Courier New,Courier,monospace">try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.obj"))) {
    Person person = (Person) ois.readObject();
    System.out.println("反序列化对象:" + person);
} catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}</font>
登录后复制
  • readObject() 返回 Object 类型,需强制转换
  • 如果类未找到或序列化版本不匹配,会抛出异常

常见注意事项

  • static 和 transient 字段不会被序列化
  • 反序列化时不会调用构造方法,而是由JVM创建对象
  • 多个对象写入同一个流时,需按顺序读取
  • 集合类如 ArrayList、HashMap 等都实现了 Serializable,可直接序列化

基本上就这些。掌握 ObjectInputStream 和 ObjectOutputStream 的使用,就能实现Java对象的持久化和跨网络传递。关键是确保类正确实现 Serializable,处理好异常,并注意字段的序列化行为。不复杂但容易忽略细节。

以上就是在Java中如何使用ObjectInputStream和ObjectOutputStream进行对象序列化_对象流常用类库的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号