Latest web development tutorials

sérialisation Java

Java fournit un mécanisme objet sérialisation, qui, un objet peut être représenté comme une séquence d'octets, la séquence d'octets comprend le type de données de l'objet, des informations sur l'objet et le type de données stockées dans l'objet .

Une fois le fichier est écrit dans un objet sérialisé peut être lu à partir du fichier, et il est désérialisé, qui est, le type d'informations d'objet, les objets de données, et les types de données d'objet peut être utilisé dans la mémoire les nouveaux objets.

L'ensemble du processus est une machine virtuelle Java (JVM) indépendant, qui est, sur un objet de la plate-forme sérialisé peut désérialiser l'objet sur une plate-forme complètement différente.

ObjectInputStream et ObjectOutputStream classe flux de données de haut niveau, la sérialisation et les méthodes qu'ils contiennent des objets anti-séquence.

classe ObjectOutputStream contient de nombreuses méthodes d'écriture pour écrire une variété de types de données, mais une façon spéciale exceptions:

public final void writeObject(Object x) throws IOException

La méthode ci-dessus sérialiser un objet et l'envoyer dans le flux de sortie. ObjectInputStream similaire classe contient les éléments suivants désérialiser la méthode d'un objet:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

Cette méthode prend l'objet suivant du flux, et l'objet est désérialisé. Sa valeur de retour est l'objet, vous devez donc convertir le type de données approprié.

Pour démontrer la sérialisation Java est de savoir comment il fonctionne, je vais utiliser le tutoriel de classe Employee mentionné précédemment, si l'on définit la classe Employee, qui implémente l'interface Serializable.

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 qu'un sérialisation objet de classe pour réussir, deux conditions doivent être remplies:

La classe doit implémenter l'objet java.io.Serializable.

Tous ces attributs doivent être sérialisable. S'il y a une propriété est pas sérialisable, la propriété doit être déclaré brièvement.

Si vous voulez savoir si une classe Java standard est sérialisable, consultez la documentation de cette classe. Tester si une instance d'une classe peut être sérialisé est très simple, il suffit de voir la classe n'a pas atteint l'interface java.io.Serializable.


objet sérialisé

classe ObjectOutputStream est utilisé pour sérialiser un objet, SerializeDemo exemple suivant instancie un objet Employee, et l'objet est sérialisé dans un fichier.

Après ce programme est exécuté, il crée un fichier nommé employee.ser. Ce programme n'a pas de sortie, mais vous pouvez lire le code pour comprendre le rôle d'un programme.

Remarque: Quand un objet est sérialisé dans un fichier, en conformité avec la convention standard de Java est de déposer une extension .ser.

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

objets Désérialise

L'exemple de programme DeserializeDemo désérialisation suivant, / tmp / employee.ser stocké objet employé.

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);
    }
}

Compiler et exécuter le programme ci-dessus les résultats sont les suivants:

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

Ici, il faut noter les points suivants:

méthode readObject () dans un try / catch bloc tentatives pour attraper ClassNotFoundException exception. Pour la JVM peut désérialiser objet, il doit être en mesure de trouver les classes de bytecode. Si la JVM ne peut pas trouver la classe dans l'objet de processus de désérialisation, une exception de ClassNotFoundException.

Notez que la valeur de retour, la méthode readObject () est converti en référence employé.

Quand un objet est sérialisé, la valeur de la propriété SSN 111 222 333, mais parce que la propriété est courte, la valeur n'a pas été envoyé au flux de sortie. Ainsi SSN attribut objet Employee désérialisé est 0.