You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何读取序列化文件employee.ser并将对象填充到ArrayList

Java反序列化employee.ser到ArrayList实现方案

前置要求

  • Employee类必须实现java.io.Serializable接口,否则会抛出序列化/反序列化异常
  • 建议在Employee类中显式声明固定的serialVersionUID,避免类结构微调后版本不匹配导致反序列化失败,示例:
private static final long serialVersionUID = 1L;
  • 反序列化所用的Employee类需要和生成employee.ser时的类结构、包路径保持一致,代码中用到的M/F常量/枚举也要可正常访问。

具体实现代码

import java.io.*;
import java.util.ArrayList;

public class ReadEmployeeSer {
    public static void main(String[] args) {
        ArrayList<Employee> employeeList = new ArrayList<>();
        ObjectInputStream input = null;
        try {
            input = new ObjectInputStream(new FileInputStream("employee.ser"));
            // 循环读取对象,直到读到文件末尾抛出EOFException
            while (true) {
                Employee emp = (Employee) input.readObject();
                employeeList.add(emp);
            }
        } catch (EOFException e) {
            // 正常结束,不需要额外处理
            System.out.println("文件读取完成,共读取" + employeeList.size() + "条员工数据");
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (input != null) {
                    input.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        // 后续可直接使用employeeList操作数据
        for (Employee emp : employeeList) {
            // 测试打印数据示例
            System.out.println(emp.getName());
        }
    }
}

关键点说明

  • 用ObjectInputStream对接FileInputStream读取序列化二进制文件
  • readObject()方法读取到文件末尾时会抛出EOFException,捕获该异常作为读取结束的标识即可
  • 必须捕获ClassNotFoundException,当JVM找不到对应的Employee类时会触发该异常
  • 流资源建议在finally块中关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者Mabheka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:45:09