原文: https://beginnersbook.com/2013/12/how-to-serialize-arraylist-in-java/

ArrayList默认可序列化的。这意味着您无需显式实现Serializable接口以序列化ArrayList。在本教程中,我们将学习如何序列化和反序列化ArrayList

例:

序列化:运行下面的类,它将创建一个文件myfile,它将以字节流的形式具有ArrayList对象。我们将在接收器端使用myfile从字节流重新创建Object注意:我们没有在下面的类中实现Serializable接口,因为默认情况下ArrayList已经被序列化了。

  1. package beginnersbook.com;
  2. import java.util.ArrayList;
  3. import java.io.*;
  4. public class ArrayListSerialization
  5. {
  6. public static void main(String [] args)
  7. {
  8. ArrayList<String> al=new ArrayList<String>();
  9. al.add("Hello");
  10. al.add("Hi");
  11. al.add("Howdy");
  12. try{
  13. FileOutputStream fos= new FileOutputStream("myfile");
  14. ObjectOutputStream oos= new ObjectOutputStream(fos);
  15. oos.writeObject(al);
  16. oos.close();
  17. fos.close();
  18. }catch(IOException ioe){
  19. ioe.printStackTrace();
  20. }
  21. }
  22. }

反序列化

在这个类中,我们从myfile中检索字节流,我们使用上面的类存储了这些字节流。我们将返回的对象类型转换为ArrayList并显示ArrayList的元素。观察输出:我们获得了在序列化之前添加到ArrayList的相同元素。

  1. package beginnersbook.com;
  2. import java.io.*;
  3. import java.util.ArrayList;
  4. public class DeSerializationClass
  5. {
  6. public static void main(String [] args)
  7. {
  8. ArrayList<String> arraylist= new ArrayList<String>();
  9. try
  10. {
  11. FileInputStream fis = new FileInputStream("myfile");
  12. ObjectInputStream ois = new ObjectInputStream(fis);
  13. arraylist = (ArrayList) ois.readObject();
  14. ois.close();
  15. fis.close();
  16. }catch(IOException ioe){
  17. ioe.printStackTrace();
  18. return;
  19. }catch(ClassNotFoundException c){
  20. System.out.println("Class not found");
  21. c.printStackTrace();
  22. return;
  23. }
  24. for(String tmp: arraylist){
  25. System.out.println(tmp);
  26. }
  27. }
  28. }

输出:

  1. Hello
  2. Hi
  3. Howdy

这就是ArrayList的序列化主题的全部内容。如果你有任何问题,请让我知道。