Das Problem dabei ist, dass ich versuche, ein Objekt zu serialisieren und in einer XML -Datei zu speichern, dann die Zeichenfolge aus der XML -Datei zu lesen und das Objekt zu deverialisieren (das Hadoop -MapReduce -Programm überträgt das Objekt über Jobconf an den TaskTracker).
In Bezug auf Serialisierung:
Wenn ich die serialisierten Daten in XML direkt speichere, habe ich beim Parsen der XML auf einen Parsenfehler gestoßen, da es illegale Zeichen gibt. Nachdem ich die Anweisungen von XML im Detail gelesen habe, fand ich, dass <> '"und nicht als XML-PCData zulässig ist. Um diese Zeichen zu verwenden, müssen sie durch integrierte Entitäten ersetzt werden:
Entität Zitatzeichen
<<<<
>>
& & & & &
"
'' '
Daher ist die direkteste Möglichkeit, es selbst zu kontrollieren, Sonderzeichen in Entitätsreferenzen beim Schreiben in die XML -Datei umzuwandeln und sie dann beim Lesen wieder umzuwandeln. Natürlich gibt es eine andere Methode, die keine Zeichenfolgen als PCData verwenden soll, sondern als CDATA (keine Tests).
Die Methode zur Verwendung der Entitätsreferenz ist zu problematisch, und mein Anwendung XML -Format kann nicht von mir selbst angegeben werden, daher muss ich eine andere Methode finden: Base64 -Codierung. Dies ist eine Codierungsmethode, die häufig verwendet wird, um Daten im Netzwerk zu übertragen. Wenn Sie die Zeichen codieren, die diese illegalen Zeichen in Base64 -Codierung existieren, haben Sie diese Zeichen nicht. Das Wichtigste ist, dass der codierte Encoder und Decoder in der Java -API, Base64Encoder und Base64DeCoder in Sun.misc bereitgestellt werden. Auf diese Weise kann der nach der Serialisierung erhaltene Bytestrom in eine Zeichenfolge umgewandelt werden. Und es kann auch in einer XML -Datei gespeichert werden.
Diese beiden Klassen sind jedoch keine offenen APIs von Sun, und es wird Warnungen für die Zusammenstellung geben.