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(); } } }
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(); } } }
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); } } }
✍ 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!