Изучите сериализацию и/или десериализацию ArrayList в Java с помощью простых примеров. Обратите внимание, что элементы списка также должны быть Serializable.
1. Сериализация
В Java класс ArrayList является сериализуемым по умолчанию. По сути, это означает, что нам не нужно явно реализовывать интерфейс Serializable для сериализации ArrayList. Мы можем напрямую использовать ObjectOutputStream для сериализации ArrayList и ObjectInputStream для десериализации объекта arraylist.
Элементы, хранящиеся в arraylist, также должны быть сериализуемыми, в противном случае программа выдаст исключение NotSerializableException.
1.1. Сериализация ArrayList строк
Ниже приведен пример программы Java для сохранения массива строк.
ArrayList<String> namesList = new ArrayList<>(List.of("alex", "brian", "charles"));try(FileOutputStream fos = new FileOutputStream("listData");ObjectOutputStream oos = new ObjectOutputStream(fos);) {oos.writeObject(namesList);} catch(FileNotFoundException e) {log.error("File not found : ", e);throw new RuntimeException(e);} catch(IOException e) {log.error("Error while writing data : ", e);throw new RuntimeException(e);}
Вывод программы.
Список сериализуется в корневой папке проекта. Укажите путь к файлу в конструкторе FileOutputStream.

2. Сериализация ArrayList объектов
Ниже приведена программа Java для сериализации ArrayList объектов Employee. Класс Employee реализует интерфейс Serializable.
@Data@AllArgsConstructor@NoArgsConstructorclass Employee implements Serializable {private Long id;private String firstName;private String lastName;}
ArrayList<Employee> employees = new ArrayList<>();employees.add(new Employee(1L, "lokesh", "gupta"));employees.add(new Employee(2L, "brian", "motto"));try(FileOutputStream fos = new FileOutputStream("employeeData");ObjectOutputStream oos = new ObjectOutputStream(fos);) {oos.writeObject(employees);} catch(FileNotFoundException e) {log.error("File not found : ", e);throw new RuntimeException(e);} catch(IOException ioe) {log.error("Error while writing data : ", ioe);ioe.printStackTrace();}
Обратите внимание, что если класс Employee не реализует интерфейс Serializable, мы получим эту ошибку.
java.io.NotSerializableException: com.howtodoinjava.demo.model.Employeeв java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)в java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
2. Десериализация
2.1. Десериализация списка строк
Программа Java для десериализации списка строк и проверки содержимого списка. Мы десериализуем тот же список, который мы сериализовали в предыдущем примере.
ArrayList<String> list = null;try(FileInputStream fis = new FileInputStream("listData");ObjectInputStream ois = new ObjectInputStream(fis);) {list =(ArrayList) ois.readObject();} catch(IOException ioe) {ioe.printStackTrace();} catch(ClassNotFoundException c) {System.out.println("Class not found");c.printStackTrace();}//Verify list datafor(String name : list) {System.out.println(name);}
Вывод программы.
alexbriancharles
2.2 Десериализация списка объектов
Программа Java для десериализации списка объектов и проверки содержимого списка. Мы десериализуем тот же список сотрудников, который мы сериализовали в предыдущем примере.
ArrayList<Employee> employeesList = null;try(FileInputStream fis = new FileInputStream("employeeData");ObjectInputStream ois = new ObjectInputStream(fis);) {employeesList =(ArrayList) ois.readObject();} catch(IOException ioe) {ioe.printStackTrace();} catch(ClassNotFoundException c) {System.out.println("Class not found");c.printStackTrace();}//Verify list datafor(Employee employee : employeesList) {System.out.println(employee);}
Вывод программы.
Employee [id=1, firstName=lokesh, lastName=gupta]Employee [id=2, firstName=brian, lastName=motto]
Подробнее: Документация по ArrayList Java