# 如何在 java 中序列化`ArrayList`

> 原文： [https://beginnersbook.com/2013/12/how-to-serialize-arraylist-in-java/](https://beginnersbook.com/2013/12/how-to-serialize-arraylist-in-java/)

[`ArrayList`](https://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html) 是[**默认**可序列化的](https://docs.oracle.com/javase/6/docs/api/java/io/Serializable.html)。这意味着您无需显式实现`Serializable`接口以序列化`ArrayList`。在本教程中，我们将学习如何序列化和反序列化`ArrayList`。

## 例：

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

```java
package beginnersbook.com;
import java.util.ArrayList;
import java.io.*;
public class ArrayListSerialization
{
   public static void main(String [] args)
   {
       ArrayList<String> al=new ArrayList<String>();
       al.add("Hello");
       al.add("Hi");
       al.add("Howdy");

       try{
         FileOutputStream fos= new FileOutputStream("myfile");
         ObjectOutputStream oos= new ObjectOutputStream(fos);
         oos.writeObject(al);
         oos.close();
         fos.close();
       }catch(IOException ioe){
            ioe.printStackTrace();
        }
   }
}
```

**反序列化**：

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

```java
package beginnersbook.com;
import java.io.*;
import java.util.ArrayList;
public class DeSerializationClass 
{
    public static void main(String [] args)
    {
        ArrayList<String> arraylist= new ArrayList<String>();
        try
        {
            FileInputStream fis = new FileInputStream("myfile");
            ObjectInputStream ois = new ObjectInputStream(fis);
            arraylist = (ArrayList) ois.readObject();
            ois.close();
            fis.close();
         }catch(IOException ioe){
             ioe.printStackTrace();
             return;
          }catch(ClassNotFoundException c){
             System.out.println("Class not found");
             c.printStackTrace();
             return;
          }
        for(String tmp: arraylist){
            System.out.println(tmp);
        }
   }
}
```

输出：

```java
Hello
Hi
Howdy
```

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