Qu'entend-on par "sérialisation d'objet"? Pouvez-vous s'il vous plaît l'expliquer avec quelques exemples?
Réponses
Trop de publicités?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:
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.
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.
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.