O problema é porque estou tentando serializar um objeto e armazená -lo em um arquivo XML, leia a sequência do arquivo XML e desserialize o objeto (o programa Hadoop MapReduce transfere o objeto para o TaskTracker via JobConf).
Em relação à serialização:
Quando eu guardo diretamente os dados serializados no XML, encontrei um erro de análise ao analisar o XML porque existem caracteres ilegais. Depois de ler as instruções do XML em detalhes, descobri que <> '"e não é permitido como xml pcData. Para usar esses caracteres, eles devem ser substituídos por entidades embutidas:
Personagens de citação de entidade
<<
>>
& & &
"
''
Portanto, a maneira mais direta é controlá -lo, converter caracteres especiais em referências de entidade ao escrever no arquivo XML e depois retornar -os ao ler. Obviamente, existe outro método que não usa strings como PCData, mas como CDATA (sem teste).
O método de usar a referência da entidade é muito problemático e meu formato XML do Application não pode ser especificado por mim, então tenho que encontrar outro método: codificação BASE64. Este é um método de codificação comumente usado para transmitir dados na rede. Se você codificar os personagens que existem esses personagens ilegais na codificação Base64, você não terá esses personagens. O mais importante é que o codificador e o decodificador codificados sejam fornecidos na API Java, Base64Encoder e Base64Decoder localizados em Sun.misc. Dessa forma, o fluxo de bytes obtido após a serialização pode ser convertido em uma string. E também pode ser armazenado em um arquivo XML.
No entanto, essas duas classes não são as APIs abertas do Sun e haverá avisos para a compilação.