Java >> Tutoriel Java >  >> Tag >> ArrayList

Comment sérialiser et désérialiser ArrayList en Java

En Java, ArrayList la classe est sérialisable par défaut. Cela signifie essentiellement que nous n'avons pas besoin d'implémenter Serializable interface explicitement afin de sérialiser ArrayList .

Nous pouvons directement utiliser ObjectOutputStream pour sérialiser ArrayList , et ObjectInputStream pour désérialiser un objet arraylist.

Remarque – Les éléments stockés dans arraylist doivent également être sérialisables, sinon le programme lancera NotSerializableException .

1. Exemple pour sérialiser ArrayList of strings

Vous trouverez ci-dessous un exemple de programme Java permettant de conserver une liste de chaînes de caractères.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class ArrayListExample 
{
    public static void main(String[] args) throws Exception 
    {
        ArrayList<String> namesList = new ArrayList<String>();
        
        namesList.add("alex");
        namesList.add("brian");
        namesList.add("charles");

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

Sortie du programme.

La liste est sérialisée dans le dossier racine du projet.

2. Exemple pour sérialiser ArrayList d'objets

Ci-dessous est un exemple de programme Java pour enregistrer une liste de tableaux de Employee objets. Employee implémenter la classe Serializable interface.

import java.io.Serializable;

public class Employee implements Serializable {

    String id;
    String firstName;
    String lastName;

    //Getters and setters

    public Employee(String id, String firstName, String lastName) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
    }
}
public class ArrayListExample 
{
    public static void main(String[] args) throws Exception 
    {
        ArrayList<Employee> employees = new ArrayList<>();
        
        employees.add(new Employee("1", "lokesh", "gupta"));
        employees.add(new Employee("2", "brian", "motto"));

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

Remarquez si Employee la classe n'implémente pas Serializable interface, nous recevrons cette erreur.

java.io.NotSerializableException: com.howtodoinjava.demo.model.Employee
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at java.util.ArrayList.writeObject(ArrayList.java:766)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
	at com.howtodoinjava.demo.ArrayListExample.main(ArrayListExample.java:23)

3. Exemple pour désérialiser ArrayList

3.1. Désérialiser la liste des chaînes

Programme Java pour désérialiser la liste de chaînes et vérifier le contenu de la liste.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class ArrayListExample 
{
    public static void main(String[] args) throws Exception 
    {
        ArrayList<String> namesList = new ArrayList<String>();
        
        try 
        {
            FileInputStream fis = new FileInputStream("listData");
            ObjectInputStream ois = new ObjectInputStream(fis);

            namesList = (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;
        }
        
        //Verify list data
        for (String name : namesList) {
            System.out.println(name);
        }
    }
}

Sortie du programme.

alex
brian
charles

3.1. Désérialiser la liste des objets

Programme Java pour désérialiser la liste des objets et vérifier le contenu de la liste.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class ArrayListExample 
{
    public static void main(String[] args) throws Exception 
    {
        ArrayList<Employee> employees = new ArrayList<>();
        
        try 
        {
            FileInputStream fis = new FileInputStream("employeeData");
            ObjectInputStream ois = new ObjectInputStream(fis);

            employees = (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;
        }
        
        //Verify list data
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }
}

Sortie du programme.

Employee [id=1, firstName=lokesh, lastName=gupta]
Employee [id=2, firstName=brian, lastName=motto]

Bon Apprentissage !!

En savoir plus :

Guide de Java ArrayList
ArrayList Java Docs


Balise Java