Encodage
Le choix de base est entre format binaire et format texte :
- les fichiers binaires sont généralement plus compacts, le code pour parser ce type de données est plus simple à mettre au point, la lecture et l'écriture sont moins exigeantes en ressources processeurs ;
- les fichiers textes sont plus simples à vérifier ou à modifier manuellement, ils posent moins de problèmes de portabilité, ils sont plus simple à maintenir et à faire évoluer en fonction des besoins.
Codages binaires
L'une des contraintes des codages binaires est la portabilité. Par exemple une machine utilisant un autre modèle de processeur que l'ordinateur d'origine doit pouvoir désérialiser un bloc de données, en prenant en compte les problèmes d'alignement de données ou d’endianness. C'est pourquoi, même si l'objet ne comporte pas de pointeurs, la simple copie de l'empreinte mémoire d'un objet n'est généralement pas une solution acceptable.
Il faut donc ici aussi utiliser des encodages conventionnels. Il est assez courant d'utiliser les conventions suivantes : aucun alignement; encodage des types C entiers en fonction de leur empreinte mémoire tous au format big-endian, les nombres en virgule flottante utilisent la norme IEEE 754.
Des protocoles comme GIOP de CORBA ou RMI de Java emploient tous deux des codages binaires.
Codages textes
Définir un codage textuel nécessite de choisir un protocole pour séparer les champs, pour encoder des données binaires (par exemple uuencode, base64 ou échappement des caractères non ASCII)…
Il est relativement courant d'utiliser un dérivé du format XML.
Les protocoles basé sur des fichiers textes XML sont SOAP, FIX et XML-RPC Le format binaire de SOAP a pour nom CDR.
La sérialisation PHP utilise un format spécifique.
Sérialisation et encodage sur internet
Le transfert de fichier texte avec l'apparition de l'internet à laissé place à des protocoles client/Serveur gérant le transfert de données sous forme de classes. Les anciens clients avaient des cookies dont la taille et l'origine étaient limités. Les objets sont l'évolution des cookies et peuvent ou non être sauvegardés dans l'espace de travail du navigateur web.
- AMF (Action Message Format) est utilisé dans de nombreux projets libre et commerciaux. Différentes implémentations existent : PHP, Java, PErl. AMF est utilisé par flash pour son serveur média et s'interface facilement avec les objets java. AMF 0 apparaît en 2001 dans le Player Flash 6 (as 1.0) et évolue en AMF 3.0 avec le Player 9 (as 3.0). AMF est un format d'échange binaire mettant en jeu des vidéos Flash ou un serveur et un client Flash.
- Google Gears est un plug in AJAX pour navigateur web. Il permet de façon transparente de sauvegarder des données localement dans une base de données SQLite durant une connexion internet. Ces données pourront être utilisées en mode non connecté. Il est fourni par défaut avec Google Chrome. Les services web en ligne Google Reader et Remember the Milk sont compatibles Google Gears
- EOF et WOF sont des objets utilisés par le serveur java WebObjects d'Apple pour une visualisation html. WOF (WebObjects Framework) s'occupe du rendu html tandis que EOF (Enterprise Objects Framework) simplifie l'accès aux bases de données. L'abandon de webobjects et la gratuité a permis à Apple de se concentrer sur le moteur, et de voir naître des outils open source (Eclipse IDE avec plug in WOLIPs).
- WCF de Microsoft permet de sérialiser des données par plusieurs objets (Xml DataContract netDataContract). Après la sérialisation, l'encodage se fait dans différents formats (Binary, Text, MTOM). Le client Silverlight support WCF.
- zodb dans zope utilise le module pickle de python pour sérialiser des objets côté serveur. Rien n'existe côté client où les objets sont rendus visualisables (html, flash, pdf, …).
- COM, Rewire permet l'échange de données entre deux applications sans sauvegarde ; il n'y a pas sérialisation.