La sérialisation en Java est un mécanisme qui convertit l'état d'un objet en un flux d'octets. La désérialisation est son processus inverse. Grâce à la désérialisation, un objet Java réel est créé en mémoire à partir d'un flux d'octets. Un tel mécanisme persiste dans l’objet. Le flux d'octets ainsi créé à partir de la sérialisation ne dépend d'aucune plate-forme. Toute autre plateforme peut désérialiser l'objet sérialisé sur une plateforme sans problème.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Ainsi, l'ensemble du processus de sérialisation et de désérialisation est indépendant de la JVM. Pour sérialiser un objet de classe, vous devez implémenter l'interface java.io.Serializing. Sérialisable en Java est une interface de marqueur. Il n’a aucun champ ni méthode à implémenter. Ce processus rend une classe sérialisable, ressemblant à un processus Opt-In.
La sérialisation en Java est implémentée par les deux classes ObjectInputStream et ObjectOutputStream. Il suffit de les recouvrir d'un wrapper afin qu'ils puissent être enregistrés dans un fichier ou envoyés sur un réseau.
La classe ObjectOutputStream, une classe de sérialisation mentionnée dans la section ci-dessus, contient plusieurs méthodes d'écriture pour écrire différents types de données, mais une méthode est la plus populaire.
public final void writeObject( Object x ) throws IOException
Vous pouvez utiliser la méthode ci-dessus pour sérialiser un objet. Cette méthode l'envoie également au flux de sortie. De la même manière, la classe ObjectInputStream contient la méthode de désérialisation des objets.
public final Object readObject() throws IOException, ClassNotFoundException
La méthode de désérialisation récupère l'objet d'un flux et le désérialise. La valeur de retour est à nouveau un objet, il suffit donc de la convertir en un type de données pertinent.
Deux conditions doivent être remplies pour une sérialisation réussie d'une classe.
Si quelqu'un a besoin de vérifier si une classe est sérialisable, la solution simple est de vérifier si la classe implémente la méthode java.io.Seriallessly ; si c'est le cas, alors il est sérialisable. Si ce n’est pas le cas, alors ce n’est pas le cas. Il convient de noter que lors de la sérialisation d'un objet dans un fichier, la pratique standard consiste à donner au fichier une extension .ser.
Si la classe contient ces méthodes, elles sont utilisées pour la sérialisation en Java.
Method | Description |
public final void writeObject (Object obj) throws IOException {} | This will write the specified object to the ObjectOutputStream. |
public void flush() throws IOException {} | This will flush the current output stream. |
public void close() throws IOException {} | This will close the current output stream. |
Method | Description |
public final Object readObject() throws IOException, ClassNotFoundException{} | This will read an object from the input stream. |
public void close() throws IOException {} | This will close ObjectInputStream. |
An example in Java is provided here to demonstrate how serialization works in Java. We created an Employee class to study some features, and the code is provided below. This employee class implements the Serializable interface.
public class Employee implements java.io.Serializable { public String name; public String address; public transient int SSN; public int number; public void mailCheck() { System.out.println("Mailing a letter to " + name + " " + address); } }
When this program finishes executing, it will create a file named employee.ser. This program does not provide a guaranteed output, rather it is for explanatory purposes only, and the objective is to understand its use and to work.
import java.io.*; public class SerializeDemo { public static void main(String [] args) { Employee e = new Employee(); e.name = "Rahul Jain"; e.address = "epip, Bangalore"; e.SSN = 114433; e.number = 131; try { FileOutputStream fileOut = new FileOutputStream("https://cdn.educba.com/tmp/employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("Serialized data saved in /tmp/employee.ser"); } catch (IOException i) { i.printStackTrace(); } } }
The below-described DeserializeDemo program deserializes the above Employee object created in the Serialize Demo program.
import java.io.*; public class DeserializeDemo { public static void main(String [] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream("https://cdn.educba.com/tmp/employee.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Employee class is not found"); c.printStackTrace(); return; } System.out.println("Deserialized Employee..."); System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); } }
Output:
Deserialized Employee…
Name: Rahul Jain
Address: epip, Bangalore
SSN: 0
Number:131
Some important points related to the program above are provided below:
Above, we introduced serialization concepts and provided examples. Let’s understand the need for serialization in our concluding remarks.
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!