Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java - Sérialisation

Java fournit un mécanisme, appelé sérialisation d'objet, où un objet peut être représenté comme une séquence d'octets qui inclut les données de l'objet ainsi que des informations sur le type de l'objet et les types de données stockées dans l'objet.

Une fois qu'un objet sérialisé a été écrit dans un fichier, il peut être lu à partir du fichier et désérialisé, c'est-à-dire que les informations de type et les octets qui représentent l'objet et ses données peuvent être utilisés pour recréer l'objet en mémoire.

Le plus impressionnant est que l'ensemble du processus est indépendant de la JVM, ce qui signifie qu'un objet peut être sérialisé sur une plate-forme et désérialisé sur une plate-forme entièrement différente.

Classes ObjectInputStream et ObjectOutputStream sont des flux de haut niveau qui contiennent les méthodes de sérialisation et de désérialisation d'un objet.

La classe ObjectOutputStream contient de nombreuses méthodes d'écriture pour écrire divers types de données, mais une méthode en particulier se démarque −

public final void writeObject(Object x) throws IOException

La méthode ci-dessus sérialise un objet et l'envoie au flux de sortie. De même, la classe ObjectInputStream contient la méthode suivante pour désérialiser un objet −

public final Object readObject() throws IOException, ClassNotFoundException

Cette méthode récupère le prochain objet du flux et le désérialise. La valeur de retour est Object, vous devrez donc la convertir en son type de données approprié.

Pour démontrer le fonctionnement de la sérialisation en Java, je vais utiliser la classe Employee dont nous avons parlé au début du livre. Supposons que nous ayons la classe Employee suivante, qui implémente l'interface Serializable −

Exemple

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 check to " + name + " " + address);
   }
}

Notez que pour qu'une classe soit sérialisée avec succès, deux conditions doivent être remplies −

Si vous êtes curieux de savoir si une classe standard Java est sérialisable ou non, consultez la documentation de la classe. Le test est simple :si la classe implémente java.io.Serializable, alors elle est sérialisable; sinon, ce n'est pas le cas.

Sérialisation d'un objet

La classe ObjectOutputStream est utilisée pour sérialiser un objet. Le programme SerializeDemo suivant instancie un objet Employee et le sérialise dans un fichier.

Une fois l'exécution du programme terminée, un fichier nommé employee.ser est créé. Le programme ne génère aucune sortie, mais étudiez le code et essayez de déterminer ce que fait le programme.

Remarque − Lors de la sérialisation d'un objet dans un fichier, la convention standard en Java est de donner au fichier un .ser extension.

Exemple

import java.io.*;
public class SerializeDemo {

   public static void main(String [] args) {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      
      try {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      } catch (IOException i) {
         i.printStackTrace();
      }
   }
}

Désérialiser un objet

Le programme DeserializeDemo suivant désérialise l'objet Employee créé dans le programme SerializeDemo. Étudiez le programme et essayez de déterminer sa sortie −

Exemple

import java.io.*;
public class DeserializeDemo {

   public static void main(String [] args) {
      Employee e = null;
      try {
         FileInputStream fileIn = new FileInputStream("/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 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);
   }
}

Cela produira le résultat suivant −

Sortie

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

Voici les points importants suivants à noter −


Java

  1. Mot-clé Java final
  2. Opérateur instanceof Java
  3. Classe statique imbriquée Java
  4. Classe anonyme Java
  5. Classe Java Singleton
  6. Réflexion Java
  7. Classe Java ObjectOutputStream
  8. Génériques Java
  9. Classe de fichier Java