El problema con esto es porque estoy tratando de serializar un objeto y almacenarlo en un archivo XML, luego leer la cadena desde el archivo XML y deserializar el objeto (el programa Hadoop MapReduce transfiere el objeto al TaskTracker a través de JobConf).
Con respecto a la serialización:
Cuando almaceno directamente los datos serializados en XML, encontré un error de análisis al analizar el XML porque hay caracteres ilegales. Después de leer las instrucciones de XML en detalle, descubrí que <> '"y no está permitido como pcdata XML. Para usar estos caracteres, deben reemplazarse con entidades incorporadas:
Personajes de cita de entidad
<<<
>>
& &
"
''
Por lo tanto, la forma más directa es controlarlo usted mismo, convertir caracteres especiales en referencias de entidad al escribir en el archivo XML y luego volverlos nuevamente al leer. Por supuesto, hay otro método que es no usar cadenas como pcdata, sino como cdata (sin prueba).
El método de uso de la referencia de entidad es demasiado problemático, y mi formato XML de aplicación no puede ser especificado por mí mismo, por lo que tengo que encontrar otro método: codificación base64. Este es un método de codificación comúnmente utilizado para transmitir datos en la red. Si codifica los caracteres que existen estos personajes ilegales en la codificación Base64, no tendrá estos personajes. Lo más importante es que el codificador codificado y el decodificador se proporcionan en la API Java, Base64Encoder y Base64Decoder ubicada en Sun.Misc. De esta manera, la corriente de byte obtenida después de la serialización se puede convertir en una cadena. Y también se puede almacenar en un archivo XML.
Sin embargo, estas dos clases no son las API abiertas de Sun, y habrá advertencias para la compilación.