Quel est le but de la sérialisation en Java?


J'ai lu un certain nombre d'articles sur la sérialisation et comment c'est si agréable 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?

Author: fad3d, 2010-02-10

8 answers

Définissons d'abord la sérialisation, puis nous pouvons expliquer pourquoi c'est si utile.

La sérialisation transforme simplement 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:

  • La Communication: Si vous avez deux machines qui exécutent le même code et qu'elles doivent communiquer, un moyen simple consiste pour une machine à créer un objet avec les informations qu'elle souhaite transmettre, puis à sérialiser cet objet vers 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, il peut facilement être sérialisé dans un tableau d'octets, et stockées dans la base de données pour plus tard récupération.

  • Copie profonde: Si vous avez besoin d'une réplique exacte 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 dans un autre objet atteint cet objectif.

  • Mise en cache: Vraiment juste une application de ce qui précède, mais parfois un objet prend 10 minutes pour construire, mais ne prendrait que 10 secondes pour désérialiser. Donc, plutôt que de tenir sur le objet géant en mémoire, il suffit de le mettre en cache dans un fichier via la sérialisation, et de le lire plus tard quand c'est nécessaire.

  • Synchronisation JVM croisée: La sérialisation fonctionne sur différentes JVM qui peuvent s'exécuter sur différentes architectures.

 166
Author: Schmelter, 2010-02-09 21:56:34

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 résout ce problème en laissant votre application enregistrer des objets sur le disque afin qu'elle puisse les lire au prochain démarrage. Si votre application va fournir un moyen d'enregistrer / partager un état précédent, vous aurez besoin d'une forme de sérialisation.

 50
Author: Gordon Gustafson, 2014-05-19 17:56:00

Je peux partager mon histoire et j'espère que cela donnera quelques idées pourquoi la sérialisation est nécessaire. Cependant, les réponses à votre question sont déjà remarquablement détaillées.

J'ai eu plusieurs projets qui ont besoin de charger et de lire un tas de fichiers texte. Les fichiers contenaient des mots d'arrêt, des verbes biomédicaux, des abréviations biomédicales, des mots sémantiquement connectés les uns aux autres, etc. Le contenu de ces fichiers est simple: mots !

Maintenant, pour chaque projet, j'avais besoin de lire les mots de chacun de ces fichiers et les mettre dans des tableaux différents; comme le contenu du fichier n'a jamais changé, il est devenu une tâche commune, mais 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 ensuite 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.

 19
Author: Rushdi Shams, 2015-09-10 06:42:09

Dans essense:

La sérialisation est le processus de conversion d'un ensemble d'instances d'objet qui contiennent des références les unes aux autres dans un flux linéaire d'octets, qui peut alors être envoyé par un socket, stockées dans un fichier, ou tout simplement manipulé comme un flux de données

Voir les utilisations de Wiki:

La sérialisation présente de nombreux avantages. Il fournit:

  1. une méthode de persistance d'objets qui est plus pratique qu'à l'écrit leurs propriétés dans un fichier texte sur disque, et les re-assembler par lecture de ce retour dans.
  2. une méthode de émission d'appels de procédure distants, par exemple, comme dans SOAP
  3. une méthode pour la distribution d'objets, en particulier dans composants logiciels tels que COM, CORBA, etc.
  4. une méthode de détection changements dans les données variables dans le temps.
 3
Author: Pool, 2017-11-02 05:58:05

Le plus évident est que vous pouvez transmettre la classe sérialisée sur un réseau, et le réceptif peut construire un duplicata de l'instanstance d'origine. Pareillement, 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 un hétérogène entier structure de données dans un foop de houle, si désiré.

 1
Author: ddyer, 2010-02-09 21:48:16

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.

 1
Author: Ron Norman, 2014-11-22 15:39:16

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.

 0
Author: David Soroko, 2010-02-09 21:51:41

Dans le simple but d'apprendre (remarquez, j'ai dit apprendre, je n'ai pas dit mieux, ou même bien, mais juste pour comprendre des choses), vous pouvez enregistrer vos données dans un fichier texte sur l'ordinateur, puis avoir un programme qui lit ces informations, et basé sur le fichier, vous pourriez avoir votre programme répondre différemment. Si vous étiez plus avancé, ce ne serait pas nécessairement un fichier txt, mais autre chose.

Sérialisation d'autre part, met les choses directement dans l'ordinateur langue. C'est comme si vous disiez quelque chose en espagnol à un ordinateur espagnol, plutôt que de lui dire quelque chose en français, le forçant à apprendre le français, puis à enregistrer les choses dans son espagnol natal en traduisant tout. Pas la réponse la plus intensive en technologie, j'essaie juste 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 le tas. pile. Vitesse, vitesse, vitesse. Et moins de traitement de fichiers d'un point de vue programmeur.

 0
Author: JCoder, 2015-03-26 21:31:18