J'ai lu un certain nombre d'articles sur la sérialisation et comment c'est si beau et génial mais aucun des arguments n'était assez convaincant. Je me demande si quelqu'un peut vraiment me dire ce que nous pouvons vraiment réaliser en sérialisant une classe?
105
Réponses:
Définissons d'abord la sérialisation, puis nous pourrons expliquer pourquoi elle est si utile.
La sérialisation consiste simplement à transformer un objet existant en un tableau d'octets. Ce tableau d'octets représente la classe de l'objet, la version de l'objet et l'état interne de l'objet. Ce tableau d'octets peut ensuite être utilisé entre les JVM exécutant le même code pour transmettre / lire l'objet.
Pourquoi voudrions-nous faire cela?
Il y a plusieurs raisons:
Communication: Si vous avez deux machines exécutant le même code et qu'elles ont besoin de communiquer, un moyen simple est pour une machine de créer un objet avec les informations qu'elle aimerait transmettre, puis de sérialiser cet objet à l'autre machine. Ce n'est pas la meilleure méthode de communication, mais elle fait le travail.
Persistance: si vous souhaitez stocker l'état d'une opération particulière dans une base de données, elle peut être facilement sérialisée dans un tableau d'octets et stockée dans la base de données pour une récupération ultérieure.
Copie profonde: Si vous avez besoin d' une exacte réplique d'un objet et que vous ne voulez pas vous donner la peine d'écrire votre propre classe clone () spécialisée, il suffit de sérialiser l'objet dans un tableau d'octets, puis de le désérialiser vers un autre l'objet atteint cet objectif.
Mise en cache: vraiment juste une application de ce qui précède, mais parfois un objet prend 10 minutes à construire, mais ne prendrait que 10 secondes à désérialiser. Ainsi, plutôt que de conserver l'objet géant en mémoire, mettez-le simplement en cache dans un fichier via la sérialisation et lisez-le plus tard lorsque cela est nécessaire.
Synchronisation croisée entre JVM: la sérialisation fonctionne sur différentes JVM pouvant être exécutées sur différentes architectures.
la source
Pendant que vous exécutez votre application, tous ses objets sont stockés en mémoire (RAM). Lorsque vous quittez, cette mémoire est récupérée par le système d'exploitation et votre programme «oublie» essentiellement tout ce qui s'est passé pendant son exécution. La sérialisation remédie à ce problème en laissant votre application enregistrer les objets sur le disque afin qu'elle puisse les relire au prochain démarrage. Si votre application doit fournir un moyen d'enregistrer / partager un état précédent, vous aurez besoin d'une forme de sérialisation.
la source
Je peux partager mon histoire et j'espère qu'elle donnera quelques idées sur les raisons pour lesquelles la sérialisation est nécessaire. Cependant, les réponses à votre question sont déjà remarquablement détaillées.
J'avais plusieurs projets qui devaient charger et lire un tas de fichiers texte. Les fichiers contenaient des mots vides, des verbes biomédicaux, des abréviations biomédicales, des mots liés sémantiquement les uns aux autres, etc. Le contenu de ces fichiers est simple: des mots !
Maintenant, pour chaque projet, j'avais besoin de lire les mots de chacun de ces fichiers et de les mettre dans différents tableaux; comme le contenu du fichier n'a jamais changé, il est devenu une tâche courante, quoique redondante, après le premier projet.
Donc, ce que j'ai fait, c'est que j'ai créé un objet pour lire chacun de ces fichiers et pour remplir des tableaux individuels (variables d'instance des objets). Ensuite, j'ai sérialisé les objets et pour les projets ultérieurs, je les ai simplement désérialisés. Je n'ai pas eu à lire les fichiers et à remplir les tableaux encore et encore.
la source
En essence :
Voir les utilisations de Wiki :
La sérialisation présente un certain nombre d'avantages. Il offre:
la source
Le plus évident est que vous pouvez transmettre la classe sérialisée sur un réseau, et le destinataire peut construire un duplicata de l'instance d'origine. De même, vous pouvez enregistrer une structure sérialisée dans un système de fichiers.
Notez également que la sérialisation est récursive, vous pouvez donc sérialiser une structure de données hétérogène entière dans un seul foop, si vous le souhaitez.
la source
Les objets sérialisés conservent leur état dans l'espace, ils peuvent être transférés sur le réseau, le système de fichiers, etc ... et le temps, ils peuvent survivre à la JVM qui les a créés.
Parfois, cela est utile.
la source
J'utilise des objets sérialisés pour standardiser les arguments que je passe aux fonctions ou aux constructeurs de classes. Passer un bean sérialisé est beaucoup plus propre qu'une longue liste d'arguments. Le résultat est un code plus facile à lire et à déboguer.
la source
Dans le simple but d'apprendre (remarquez, j'ai dit apprendre, je n'ai pas dit mieux, ni même bien, mais juste pour comprendre les choses), vous pouvez enregistrer vos données dans un fichier texte sur l'ordinateur, puis avoir un programme qui lit ces informations, et en fonction du fichier, vous pouvez faire en sorte que votre programme réponde différemment. Si vous étiez plus avancé, ce ne serait pas nécessairement un fichier txt, mais autre chose.
La sérialisation, d'autre part, met les choses directement en langage informatique. C'est comme si vous disiez quelque chose à un ordinateur espagnol en espagnol, plutôt que de lui dire quelque chose en français, en le forçant à apprendre le français, puis à sauvegarder des choses dans son espagnol natal en traduisant tout. Ce n'est pas la réponse la plus technologique, j'essaie simplement de créer un exemple compréhensible dans un format de langue commun.
La sérialisation est également plus rapide, car en Java, les objets sont gérés sur le tas et prennent beaucoup plus de temps que s'ils étaient représentés comme des primitives sur la pile. Vitesse, vitesse, vitesse. Et moins de traitement de fichiers du point de vue du programmeur.
la source