Le problème avec cela est parce que j'essaie de sérialiser un objet et de le stocker dans un fichier XML, puis de lire la chaîne à partir du fichier XML et de désérialiser l'objet (le programme Hadoop MapReduce transfère l'objet à TaskTracker via JobConf).
Concernant la sérialisation:
Lorsque je stocke directement les données sérialisées dans XML, j'ai rencontré une erreur d'analyse lors de l'analyse du XML car il y a des caractères illégaux. Après avoir lu les instructions de XML en détail, j'ai constaté que <> '"et n'est pas autorisé comme XML PCDATA. Pour utiliser ces caractères, ils doivent être remplacés par des entités intégrées:
Caractères de citation d'entité
<<<
>>
& &
"
''
Par conséquent, le moyen le plus direct est de le contrôler vous-même, de convertir des caractères spéciaux en références entités lors de l'écriture dans le fichier XML, puis de les retourner lors de la lecture. Bien sûr, il existe une autre méthode qui ne consiste pas à utiliser des chaînes comme PCDATA, mais comme CDATA (pas de test).
La méthode d'utilisation de la référence d'entité est trop gênante, et mon format XML d'application ne peut pas être spécifié par moi-même, je dois donc trouver une autre méthode: codage de base64. Il s'agit d'une méthode d'encodage couramment utilisée pour transmettre des données sur le réseau. Si vous encodez les caractères qui existent ces caractères illégaux dans le codage de la base64, vous n'aurez pas ces caractères. La chose la plus importante est que l'encodeur et le décodeur codés soient fournis dans l'API Java, Base64Encoder et Base64Decoder situé dans Sun.Misc. De cette façon, le flux d'octets obtenu après sérialisation peut être converti en chaîne. Et il peut également être stocké dans un fichier XML.
Cependant, ces deux classes ne sont pas des API ouvertes de Sun, et il y aura des avertissements pour la compilation.