XIO - eXtensible Integrated Object
Xio est une librairie de sérialisation / désérialisation d'objets simples.
Informations
La sérialisation consiste à transformer un objet informatique codé en une suite d'éléments binaires ou sous forme de texte.
Xio permet cela à travers l'objet Parser. La lecture se fait aussi simplement que l'écriture via des méthodes read ou write.
Types d'objets
Le processus de transformation des objets distinguait 3 types de Node :
- les listes ou tableaux → ListNode
- les maps d'objets → MapNode
- les objets simples (chaînes de caractères) → StringNode (→ Primitive)
Depuis la version 0.3, il en distingue un nouveau :
- les objets complexes → ObjectNode
Il est possible d'ajouter ses propres objets spécifiques étendant Node.
Primitives
S'ajoute à cela un système de primitives fonctionnant comme des objets simples via l'interface wx.xio.primitives.Primitive et permettant de créer ses propres objets sérialisables.
Ces objets sont qualifiés de “simples” car leur contenu est restreint à des données simples sans références à des objets complexes. Le traitement d'une primitive se fait généralement d'une seule traite sans traitement interne.
Objets "complexes"
Les objets “complexes” ou “lourds” sont simplement des objets sérialisés grâce à un set concis d'annotations :
@Serializable(method=“mamethod|null”, fields=Serializable.ALL|Serializable.ANNOTED): détermine si une classe peut être sérialisée, si elle possède une méthode spécifique de sérialisation et s'il faut traiter tous les champs sérialisables ou seulement ceux annotés@Property: détermine un champ qui peut et doit être sérialisé; on peut indiquer spécifiquement un champ non-sérialisable par le mot-clétransient@Arguments({“field1”, “field2”, … “fieldn”}): détermine le constructeur à utiliser ainsi que les champs sérialisés à utiliser en tant qu'arguments
Liens
A noter que les sources du programme contiennent la documentation ainsi que les exemples (packages wx.test).
La version en développement est visualiasable depuis trac :
Versions
Fait
Version 0.7 :
- gestion i/o selon DataInputStream et DataOutputStream ⇒
wx.xio.io.ObjectInputStreametwx.xio.io.ObjectOutputStream - gestion du scripting lié au JSR-223
- primitive statique à motif
@static{className.staticFieldName}comprenant le cas particulier@static{className.class}
Version 0.6 :
- gestion étendue corrigée des primitives : seule la partie de la chaîne de caractères préalablement indiquée comme valable est traîtée par la suite
- nouvelle gestion des nombres en général : int, long, float, double, BigInteger et BigDecimal
- constante de paramétrage
Number.USE_BIG_NUMBERS
Version 0.5 :
- corrections internes
- ajout d'un construction Header(boolean shortMap) vu son utilisation importante
- ajout de l'énumération
wx.xio.ObjectNode$PrimitiveType - gestion des valeurs par défaut pour les primitives des objets complexes dans
wx.xio.ObjectNode - ajout d'un exemple d'objet complexe à données incomplètes transformées par défaut
Version 0.4 :
- primitive à motif
PatternPrimitive - correction du signe des nombres pour la primitive
Number - ajout d'une liste globale d'imports dans
Header
Version 0.3 :
- gestion des objets complexes par annotations7)
- ajout d'un exemple pour les objets complexes
- suppression de l'annotation Xioable pour un nouveau package
wx.xio.annotation
Version 0.2 :
- documentation correcte créée
- des exemples ont été créés (encore peu)
- restructuration complète
- gestion des maps à clés non-textuelles
- ajout de l'annotation Xioable supplément à l'interface Serializable
A faire
- compression des données (binaire, gzip, bzip)
- proposer des exemples spécifiques (primitives, header …)
- proposer des exemples de scripting et i/o
- tester et utiliser la librairie au mieux