web-dev-qa-db-fra.com

Alternative de sérialisation Java avec de meilleures performances

Supposons que j'utilise la sérialisation d'objet Java standard pour écrire/lire de petits objets Java (<1 Ko) dans/depuis la mémoire tampon. La partie la plus critique est la désérialisation, c’est-à-dire la lecture d’objets Java à partir de la mémoire tampon (tableau d’octets).

Existe-t-il une alternative plus rapide à la sérialisation Java standard pour ce cas? 

16
Michael

jetez un oeil à kryo . C'est beaucoup plus rapide que le mécanisme de sérialisation intégré (qui écrit beaucoup de chaînes et repose beaucoup sur la réflexion), mais un peu plus difficile à utiliser .
edit: R.Moeller ci-dessous suggéré FST , dont je n'ai jamais entendu parler jusqu'à présent, mais qui semble être à la fois plus rapide que le kryo et compatible avec la sérialisation intégrée à Java (ce qui devrait le rendre encore plus facile à utiliser), donc je regarderais ce 1er

29
radai

Vous voudrez peut-être aussi regarder FST .

fournit également des outils pour la lecture/écriture hors délai

33
R.Moeller

Essayez Google protobuf ou Thrift .

7
SpyBot

La sérialisation standard ajoute de nombreuses informations de type, qui sont ensuite vérifiées lorsque l'objet est désérialisé. Lorsque vous connaissez le type d'objet que vous désérialisez, cela n'est généralement pas nécessaire.

Ce que vous pouvez faire, c’est créer votre propre méthode de sérialisation pour chaque classe, qui écrit simplement toutes les valeurs de l’objet dans un tampon d’octets, et un constructeur (ou une méthode de fabrique, lorsque vous basculez de cette façon) qui prend un tel tampon d’octets et lit toutes les variables de celui-ci.

Mais tout comme AlexR, je me demande si vous en avez vraiment besoin. La sérialisation n'est généralement nécessaire que lorsque les données quittent le programme (par exemple, elles sont stockées sur un disque ou envoyées sur le réseau vers un autre programme).

3
Philipp

La sérialisation standard de Java est connue pour être lente et pour utiliser une quantité énorme d'octets sur le disque. Il est très simple de faire votre propre sérialisation personnalisée.
La sérialisation javas std est bien pour les projets de démonstration, mais pour les raisons susmentionnées, elle ne convient pas aux projets professionnels. Le contrôle de version ultérieur n'est pas sous votre contrôle.

Java fournit tout ce dont vous avez besoin pour la sérialisation personnalisée, voir le code de démonstration dans mon message à

Java (dé) sérialisation partielle d'objets

Avec cette approche, vous pouvez même spécifier le format de fichier binaire, de sorte qu’en C ou C #, il puisse également être lu. . memm mais seulement 1 octet lors de la sérialisation personnalisée (en octet)

Si différents partenaires de projet doivent lire vos données en série, Googles Protobuf est une alternative à regarder. 

1
AlexWien