Wox-xion Dev wiki

xio

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.ObjectInputStream et wx.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
1) , 2) , 3) , 4) , 5) , 6) avec documentation - la même version que celle en ligne
7) opposées à une syntaxe trop contraignante et lourde
xio.txt · Dernière modification: 2011/09/04 23:35 (modification externe)