web-dev-qa-db-fra.com

Java Sérialisation vs JSON vs XML

Je me demande quel mécanisme sérialisé devrions-nous choisir lorsque nous traitons des objets transférés sur le réseau. Quels sont les avantages et inconvénients ?

Je sais que la plupart du temps, nous utilisons JSON ou XML pour AJAX puisque les formats de transfert sont à peu près le format Javascript et plus JSON est assez léger avec son faible encombrement, donc la sérialisation Java est-elle totalement hors de propos?

29
peter

En général, la question importante est de savoir quel client recevra les objets sérialisés - navigateurs/moteurs JavaScript comme (node-js), Java, clients inconnus/multiples).

JSON - La syntaxe JSON est essentiellement JavaScript et donc tout composant avec un moteur JS gérera très bien son analyse - même les structures de données compliquées seront converties en objets "vivants" efficacement. Les analyseurs JSON existent pour pratiquement toutes les langues et il est facile à utiliser même lorsque vous n'utilisez pas de moteur JS (prenez Google Gson par exemple, qui est capable de convertir JSON en objets correspondants avec facilité), ce qui en fait un bon candidat pour la communication multilingue - par exemple dans une architecture de messagerie .

XML - partage de nombreux avantages de JSON - multilingue, léger, etc. Adobe Flex, par exemple, gère très bien XML, encore mieux que JSON. C'est certainement un substitut approprié pour JSON. Personnellement, je préfère JSON pour sa syntaxe JS, mais XML est également bon.

Sérialisation Java - Ne doit être envisagée que pour la communication Java vers Java. Une note importante est que les définitions de classe devraient être sur les extrémités d'envoi et de réception et souvent vous ne gagneriez pas grand-chose en passant l'objet entier. Je n'écarterais pas RMI comme protocole de communication, cela simplifie le développement. Cependant, les composants d'application résultants seront couplés en dur, ce qui rendra leur remplacement très difficile.

Encore une remarque - La sérialisation en général a ses frais généraux. Cependant, lorsque la communication est effectuée sur un réseau, le goulot d'étranglement est souvent le réseau plutôt que la sérialisation/désérialisation elle-même.

19
Ariel T

Je pense que cela dépend. Si vous envoyez une requête http ou quelque chose, alors JSON ou XML est évidemment un bon choix. Si vous envoyez simplement un objet Java sur un socket tcp pour un algorithme distribué ou quelque chose, je pense que la sérialisation Java est plus facile/meilleure)

6
user12345613

Pendant la sérialisation sur le réseau, xml et json fonctionneraient. Cela dépend du consommateur de ces informations.

  • Si le consommateur est un navigateur utilisant Ajax pour demander des informations et afficher quelque chose à l'écran, jason est généralement le meilleur choix car il est déjà au format d'objet Javascript et il n'y a pas de frais généraux de conversion en objets compatibles Javascript. En fait, de nombreuses bibliothèques Ajax (par exemple jQuery) ont un bon support pour json.

  • Si votre consommateur est une autre application qui peut ou non être en Java, alors xml est le mécanisme de sérialisation préféré. Les services Web utilisent très largement xml.

  • Si votre consommateur est un autre programme Java alors définitivement Java est l'option préférée (par exemple RMI). Donc ce n'est pas encore disponible :-).

Mais oui, il y a une ligne floue entre XML et Json. Ce que j'ai mentionné ici, c'est la pratique générale. Voici un Nice article mettant tout l'aspect sur xml vs jason.

4
Santosh

Je pense qu'en tant que développeur, nous n'avons pas besoin de nous occuper de la sérialisation des objets de réponse. mais si nous considérons JSON, il a des avantages décents pour choisir XML.

  1. La réponse JSON n'a pas besoin de réponse codée contrairement au XML.
  2. la gestion et le traitement de JSON sont plus rapides que XML car ils ne sont pas analysés.
  3. Réponse XML pour AJAX est toujours codé, donc le traitement prend du temps.
  4. JSON correspond le mieux à Jquery pour le codage lié à l'interface utilisateur et est plus rapide.
  5. Traitement d'énormes données Par exemple: la récupération des données d'indexation vers/depuis le serveur, la gestion JSON est plus rapide.
1
chaosguru