温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java序列化文件怎么读取

发布时间:2026-09-14 11:42:41 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 中,**序列化文件(.ser 或自定义扩展名)**是通过 ObjectOutputStream 写出的对象,需要用 ObjectInputStream 来读取。

下面给你一个完整、清晰的说明和示例。


一、基本读取步骤

  1. 确保被序列化的类 实现了 Serializable
  2. 使用 FileInputStream + ObjectInputStream
  3. 调用 readObject() 读取对象
  4. 强转为你需要的类型
  5. 关闭流(推荐用 try-with-resources

二、示例:写入和读取序列化文件

1️⃣ 定义一个可序列化类

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

2️⃣ 写入序列化文件(示例)

import java.io.*;

public class SerializeDemo {
    public static void main(String[] args) throws IOException {
        User user = new User("Tom", 18);

        try (ObjectOutputStream oos =
                     new ObjectOutputStream(new FileOutputStream("user.ser"))) {
            oos.writeObject(user);
        }
    }
}

3️⃣ 读取序列化文件(核心)

import java.io.*;

public class DeserializeDemo {
    public static void main(String[] args) {
        try (ObjectInputStream ois =
                     new ObjectInputStream(new FileInputStream("user.ser"))) {

            User user = (User) ois.readObject();
            System.out.println(user);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

三、常见注意事项(很重要)

✅ 1. serialVersionUID 必须一致

反序列化时,JVM 会校验:

private static final long serialVersionUID = 1L;

如果类结构变了但 serialVersionUID 不一致,会抛:

InvalidClassException

✅ 2. 类路径必须存在

反序列化时:

  • 类必须在 classpath 中
  • 包名、类名必须一致

否则会报:

ClassNotFoundException

✅ 3. 反序列化不等于“重新执行构造方法”

  • 构造方法 不会调用
  • 字段直接恢复

✅ 4. 敏感字段不序列化

private transient String password;

transient 字段反序列化后为 null


四、读取多个对象

如果写入了多个对象:

while (true) {
    try {
        Object obj = ois.readObject();
        System.out.println(obj);
    } catch (EOFException e) {
        break;
    }
}

五、如果你用的是 JSON / XML(不是 Java 原生序列化)

注意:

  • .json ❌ 不能用 ObjectInputStream
  • 要用:
    • Jackson
    • Gson
    • Fastjson

如果你愿意,我可以:

  • 给你 Jackson 读取 JSON 示例
  • 或对比 Java 原生序列化 vs JSON

你现在是读哪种序列化文件?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI