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
相关产品推荐
相关产品推荐

