Salut all,
Je cherche une api simple et légère pour faire de la serialisation / désérialisation en XML, en JavaME. Est-ce que quelqu'un en connaît une ? Si je pouvais éviter de le refaire ;)
Merci bien.
Version imprimable
Salut all,
Je cherche une api simple et légère pour faire de la serialisation / désérialisation en XML, en JavaME. Est-ce que quelqu'un en connaît une ? Si je pouvais éviter de le refaire ;)
Merci bien.
OH PINAISE 8O
CLDC ne contient pas de quoi faire de l'introspection :cry:
Bienvenue dans le monde mobile :bug:
Je pense que tu as ta solution : chaque objet doit être responsable de sa sérialisation.
Par ailleurs, à moins que la sérialisation doivent pour une raison particulière se faire en XML de bout en bout, tu peux utiliser les DataInputStream et DataOutputStream, qui génèrent un format binaire portable entre les différentes éditions de Java, format qui pourra être décodé côté serveur par exemple grâce à ces mêmes objets et transformé en un XML adéquat. Cela peut sauver de la bande passante si ces objets sérialisés passent sur le réseau et de la mémoire et du temps CPU au niveau téléphone.
C'est très intéressant ce que tu me dis là. En fait je n'ai pas de contraintes de transfert / reseau, mais de portabilité oui, puisque je crée du contenu pour mon jeu grâce à un éditeur en Java 5, contenu qui doit être lu par le jeu sur mon portable. Par contre, utiliser ces DataInputStream et DataOutputStream implique qu'il doit s'agir des mêmes objets nan ?
Par ailleurs, l'intérêt que je voyais au XML était de pouvoir changer ce contenu dynamiquement, pendant le jeu, et le sauver dans un record store. Cela est-il possible avec les flux produits par les DataOutputStream ?
Merci pour ton aide.
Les DataInputStream et DataOutputStream sont des objets présent dans toutes les éditions de Java (peut-être pas JavaCard tout de même). Ils sont capables de lire et d'écrire les types de base de Java, et ce qui est écrit par un DataOutputStream peut toujours être lu par un DataInputStream, quelque soit l'édition utilisée.
Par ailleurs, il n'y a bien entendu aucun souci pour écrire ces flux dans le RMS, il ne s'agit que de tableaux d'octets...
Bon et ben merci pour ces infos, je vais faire ça alors. Je n'ai plus qu'à faire en sorte d'avoir les mêmes objets métier dans l'éditeur et dans le jeu. :mrgreen:
En fait je me posais une dernière question quand même : est-il vraiment possible d'avoir les mêmes objets, à partager par plusieurs éditions de java ?
Je m'expliquer : mes objets sont des beans simples, qui contiennent, au pire, des Vector et autres Hashtable. Ces classes JavaME sont-elles compatibles avec leur version Java 5 ? Et inversement, si j'essaie d'avoir des objets métier qui ne contiennent que des Vector ou des Hashtable en Java 5, pourrais-je les lire ensuite en JavaME ? Je me demande si le transtypage va fonctionne si facilement que ça :(
Merci
A priori, il n'y a pas de souci. Par contre, tu ne pourra pas sérialiser directement tes Vector et HashTable, car les DataXXXStream ne gèrent que les types de base (int, float, boolean, ...).
Il va te falloir utiliser une convention du style écrire la taille du Vector, puis chacun des éléments, ou écrire la taille de la HashTable, puis clé1, valeur1, clé2, valeur2, ....
Pour reconstruire tes objets, tu commence par lire la taille de l'objet, et tu le reconstruit en lisant tes données.
Hum, c'est une solution qui me convient moyennement pour le moment, parce que mes objets métiers bougent beaucoup... Sinon tu évoquais une autre solution, qui consisterait à faire en sorte que chaque objet sache se sérialiser en XML. J'aime bien cette idée, c'est plus simple à gérer au niveau dev, mais est-ce que ce n'est pas un peu sale ?
Dans la mesure où tu n'as pas d'autre choix, je ne vois pas en quoi c'est sale :P. De toutes façons, même la méthode utilisant des DataXXXStream impose que chaque objet se sérialise lui-même...Citation:
Envoyé par guenievre
:lol: je voulais dire que mettre le code pour produire du XML dans chaque classe métier, c'est pas très très joli, mais pourquoi pas après tout :roll:
Une autre solution que j'envisage, c'est de laisse les XMLEncoder et XMLDecoder faire leur boulot et essayer d'aller lire ça une fois dans le jeu, mais le format produit n'est pas évident. Les tags perso, c'est quand même plus simple !