424 votes

Qu'est-ce que la sérialisation d'objet?

Qu'entend-on par "sérialisation d'objet"? Pouvez-vous s'il vous plaît l'expliquer avec quelques exemples?

433voto

TarkaDaal Points 2961

Sérialisation est la conversion d’un objet à une série d’octets, afin que l’objet puisse être facilement enregistré dans un stockage persistant ou écouté sur une liaison de communication. Le flux d’octets peut ensuite être sérialisé - converti en une réplique de l’objet original.

412voto

OscarRyz Points 82553

Vous pouvez penser de la sérialisation en tant que le processus de conversion d'une instance d'objet dans une séquence d'octets (ce qui peut être binaire ou non en fonction de la mise en œuvre).

Il est très utile lorsque vous souhaitez transmettre un objet de données à travers le réseau, par exemple à partir d'une JVM à l'autre.

En Java, le mécanisme de sérialisation est intégré dans la plate-forme, mais vous avez besoin pour mettre en œuvre les Serializable interface pour la rendre un objet sérialisable.

Vous pouvez également empêcher certaines données dans votre objet sérialisé par marquage de l'attribut comme transitoire.

Enfin, vous pouvez remplacer le mécanisme par défaut, et de fournir votre propre, ce qui peut être appropriée dans certains cas particuliers. Pour ce faire, vous utilisez une des fonctions cachées dans java.

Il est important de noter que ce qui est sérialisé est la "valeur" de l'objet, ou le contenu, et non pas la définition de la classe. Par conséquent, les méthodes ne sont pas numérotés.

Voici un exemple très simple avec des commentaires pour faciliter la lecture:

import java.io.*;
import java.util.*;

// This class implements "Serializable" to let the system know
// it's ok to do it. You as programmer are aware of that.
public class SerializationSample implements Serializable {

    // These attributes conform the "value" of the object.

    // These two will be serialized;
    private String aString = "The value of that string";
    private int    someInteger = 0;

    // But this won't since it is marked as transient.
    private transient List<File> unInterestingLongLongList;

    // Main method to test.
    public static void main( String [] args ) throws IOException  { 

        // Create a sample object, that contains the default values.
        SerializationSample instance = new SerializationSample();

        // The "ObjectOutputStream" class have the default 
        // definition to serialize an object.
        ObjectOutputStream oos = new ObjectOutputStream( 
                               // By using "FileOutputStream" we will 
                               // Write it to a File in the file system
                               // It could have been a Socket to another 
                               // machine, a database, an in memory array, etc.
                               new FileOutputStream(new File("o.ser")));

        // do the magic  
        oos.writeObject( instance );
        // close the writing.
        oos.close();
    }
}

Lors de l'exécution de ce programme, le fichier "o.ser" est créé et nous pouvons voir ce qui s'est passé derrière.

Si nous changeons la valeur de: someInteger , par exemple de type Entier.MAX_VALUE, nous pouvons comparer la sortie pour voir quelle est la différence.

Voici une capture d'écran montrant précisément cette différence:

alt text

Pouvez-vous repérer les différences? ;)

Il y a un autre domaine pertinent dans la sérialisation Java: Le serialversionUID mais je suppose que c'est déjà trop long pour le couvrir.

24voto

Kent Boogaart Points 97432

Sérialisation prend un objet « en direct » à la mémoire et le convertir en un format qui peut être stocké quelque part (par exemple. en mémoire, sur disque) et plus tard « désérialisée » en un objet direct.

14voto

noquery Points 492

J'ai aimé la façon dont @OscarRyz présente. Bien qu'ici, je suis en continuant l' histoire de la sérialisation qui a été à l'origine écrit par @articlestack.

Même si savoir sur le robot de la structure de la classe et d'avoir des données sérialisées de la Terre scientifique n'ont pas été en mesure de désérialiser les données qui peuvent faire des robots de travail.

Exception in thread "main" java.io.InvalidClassException:
SerializeMe; local class incompatible: stream classdesc
:

Mars les scientifiques ont été en attente pour le paiement complet. Une fois que le paiement a été effectué Mars scientifiques partagé le serialversionUID avec de la Terre les scientifiques. De la terre scientifique mis à robot de classe et tout a une fin.

9voto

Sathesh Points 467

La sérialisation signifie la persistance des objets java. Si vous souhaitez enregistrer l'état de l'objet et de vouloir reconstruire l'état par la suite (peut être dans une autre JVM) de la sérialisation peut être utilisé.

Notez que les propriétés d'un objet n'est que va être sauvé. Si vous voulez ressusciter à nouveau l'objet, vous devriez avoir le fichier de classe, parce que les variables de membre seront les seuls à être stockées et non les fonctions de membre.

par exemple:

ObjectInputStream oos = new ObjectInputStream(                                 
                                 new FileInputStream(  new File("o.ser")) ) ;
SerializationSample SS = (SearializationSample) oos.readObject();

Le Searializable est un marqueur de l'interface qui marque que votre classe est sérialisable. Interface marqueur signifie que c'est juste une interface vide et à l'aide de cette interface informera la JVM que cette classe peut être sérialisable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X