Maison > Java > javaDidacticiel > le corps du texte

Sérialisation et désérialisation en Java

DDD
Libérer: 2024-10-31 06:12:30
original
912 Les gens l'ont consulté

Serialization and Deserialization In Java

En Java avancé, la sérialisation et la désérialisation sont des processus permettant de sauvegarder et de restaurer l'état d'un objet, permettant de stocker des objets dans des fichiers ou des bases de données, ou de les transférer sur un réseau. Voici un aperçu de ces concepts et de leur application

1️⃣ Sérialisation

La sérialisation est le processus de conversion d'un objet en un flux d'octets. Ce flux d'octets peut être enregistré dans un fichier, envoyé sur un réseau ou stocké dans une base de données. En Java, l'interface Serialisable est utilisée pour indiquer qu'une classe peut être sérialisée.

✍ Étapes pour sérialiser un objet :

▶️ Implémentez l'interface sérialisable.

▶️ Utilisez ObjectOutputStream et FileOutputStream pour écrire l'objet dans un fichier ou un flux de sortie.

▶️ Appelez la méthode writeObject() sur ObjectOutputStream.

?Exemple de code :

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    int id;

    public Employee(String name, int id) {
        this.name = name;
        this.id = id;
    }
}

public class SerializeDemo {
    public static void main(String[] args) {
        Employee emp = new Employee("John Doe", 101);

        try (FileOutputStream fileOut = new FileOutputStream("employee.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(emp);
            System.out.println("Serialized data is saved in employee.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Copier après la connexion

Ici, employe.ser est un fichier sérialisé qui stocke le flux d'octets de l'objet.

2️⃣ Désérialisation
La désérialisation est le processus inverse, dans lequel le flux d'octets est reconverti en une copie de l'objet d'origine. Cela vous permet de recréer l’état de l’objet après son stockage ou son transfert.

✍ Étapes pour désérialiser un objet :

▶️ Utilisez ObjectInputStream et FileInputStream pour lire l'objet à partir du fichier ou du flux d'entrée.

▶️ Appelez la méthode readObject() sur ObjectInputStrea

?Exemple de code :

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializeDemo {
    public static void main(String[] args) {
        Employee emp = null;

        try (FileInputStream fileIn = new FileInputStream("employee.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            emp = (Employee) in.readObject();
            System.out.println("Deserialized Employee...");
            System.out.println("Name: " + emp.name);
            System.out.println("ID: " + emp.id);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Copier après la connexion

Cela récupérera l'état d'origine de l'objet, permettant l'accès à ses champs tels qu'ils étaient avant la sérialisation.

3️⃣ Sujets avancés sur la sérialisation

▶️ Sérialisation personnalisée : remplacez writeObject() et readObject() pour une sérialisation personnalisée.

▶️ Interface externalisable : fournit un contrôle total sur la sérialisation, nécessitant la mise en œuvre des méthodes writeExternal() et readExternal().

▶️ Champs transitoires : utilisez le mot-clé transient pour éviter de sérialiser des champs spécifiques (par exemple, des données sensibles comme les mots de passe).

✍ Avantages de la sérialisation :

▶️ Permet de sauvegarder l'état d'un objet pour une utilisation future.

▶️ Facilite le transfert d'objets de données complexes sur les réseaux.

? Expliquez brièvement l'exemple de code

import java.io.*;

class Student implements Serializable {
    private  static   final long serialVersionUId = 1l;
    private String name ;
    private int  age;
    private String Address;

    public Student(String name,int age,String Address){
        this.name = name;
        this.age = age;
        this.Address = Address;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public void setAddress(String Address){
        this.Address = Address;
    }

    public String getName(){
        return name;
    }
    public String getAddress(){
        return Address;
    }
    public int getAge(){
        return age;
    }


    public String toString(){
        return ("Student name is "+this.getName()+", age is "+this.getAge()+", and address is "+this.getAddress());
    }
}

public class  JAVA3_Serialization {
    // when you implement Serializable then you must be write a serialVersionUId because when it serialise and deserialize it uniquely identify in the network
    // when u update ur object or anything then you have to update the serialVersionUId increment .
    // private  static   final long serialVersionUId = 1l;

    // transient  int x ;
    // If you do not want a particular value to serialise and Deserialize.
    // the value x, when you don't serialise and Deserialize Then transient you used.

    public static void main(String[] args) {

        Student student = new Student("kanha",21,"angul odisha");

        String filename = "D:\Advance JAVA\CLS3 JAVA\Test.txt"; // store the data in this location
        FileOutputStream fileOut = null; // write file
        ObjectOutputStream objOut = null; // create object
        //Serialization
        try {
            fileOut = new FileOutputStream(filename);
            objOut = new ObjectOutputStream(fileOut);
            objOut.writeObject(student);

            objOut.close();
            fileOut.close();

            System.out.println("Object has been serialise =\n"+student);
        } catch (IOException ex){
            System.out.println("error will occure");
        }

        //Deserialization
        FileInputStream fileIn = null;
        ObjectInputStream objIn = null;
        try {
            fileIn = new FileInputStream(filename);
            objIn = new ObjectInputStream(fileIn);
            Student object =(Student) objIn.readObject();
            System.out.println("object has been Deserialization =\n"+object);

            objIn.close();
            fileIn.close();

        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
}

Copier après la connexion

✍ Notes clés :

▶️ Seules les données membres non statiques et non transitoires sont sérialisées par défaut.

▶️ Les objets sérialisables doivent assurer la compatibilité entre les versions si la classe est modifiée après sérialisation.

Pour plus d'informations, n'hésitez pas à mentionner votre GitHub pour des exemples détaillés et des exemples de code ! Faites-moi savoir si vous souhaitez des ajustements spécifiques.

GitHub - https://github.com/Prabhanjan-17p

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal