Bonjour,

Aujourd'hui je souhaiterais vous présenter mon projet universal-serializer (lien GitHub) pour sérialiser/désérialiser des objets Java à l'aide d'une interface commune Serializer.

L'objectif ? Simplifier le développement. En effet, lorsque vous utilisez des méthodes pour transformer vos objets d'un format vers un autre vous :
  • Utilisez souvent plus d'une instruction
  • Effectuez des recherches dans la JavaDoc pour trouver la méthode qui convient
  • Pouvez oublier de fermer vos flux


Cet API gère actuellement plusieurs formats :
  • Binaire, avec 2 implémentations : Sérialisation Java, Google Protocol Buffers
  • Fichier, avec 2 implémentations : CSV, Excel (XLS et XLSX)
  • Texte, avec 4 implémentations : JWT (JSON Web Tokens), XML (JAXB), Base64, Base64 URL


Présentation de l'interface Serializer :
  • serialize(X myObject) : Y Sérialise un objet Java vers un autre format (binaire, texte, ou fichier).
  • deserialize(Y myData) : X Désérialise un format de donnée vers un objet Java (opération inverse de serialize())
  • sendTo(X myObject, OutputStream out) : void Sérialise un objet Java et l'envoi dans un flux (utile pour du développement réseaux)
  • receiveFrom(InputStream in) : X Récupère un objet Java à partir d'un flux (utile pour du développement réseaux)


Voici un exemple d'utilisation pour chaque format :
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Sérialisation Java
JavaSerializer<MyClass> s = new JavaSerializer<>();
byte[] byteArray = s.serialize(new MyClass(/* init */));
MyClass deserialized = s.deserialize(byteArray);
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Sérialisation Excel
ExcelSerializer<MyClass> s = new ExcelSerializer<>(MyClass.class /* , your FileOptions */);
Path path = s.serialize(new ArrayList<MyClass>());
List<MyClass> deserialized = s.deserialize(path);
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
// Sérialisation JWT
String SECRET = "546T78UINqqsvfzfs<vs<sdv_-('U87Y89YG87";
JwtSerializer<MyClass> s = new JwtSerializer<>(MyClass.class, Algorithm.HS256, SECRET);
String jsonWebToken = s.serialize(new MyClass(/* init */));
MyClass deserialized = s.deserialize(jsonWebToken);

Questions :
1. Que pensez-vous de ce projet ? Vous semble-t-il suffisamment intéressant pour être utilisé dans vos projets ?
2. Quels sont les implémentations que vous souhaiteriez voir apparaitre dans l'API ? (Mis à part JSON, que je ne compte pas implémenter)
3. Si vous aviez à changer les dépendances du pom.xml, mettriez-vous des dépendances en optional true ?

Note : En ce qui concerne le nom du projet, j'ai pensé à une télécommande universelle


Merci pour vos retours