Проблема в том, что я пытаюсь сериализовать объект и хранить его в файле XML, затем прочитать строку из файла XML и десериализовать объект (программа Hadoop MapReduce передает объект в TaskTracker через JobConf).
Относительно сериализации:
Когда я непосредственно сохраняю сериализованные данные в XML, я столкнулся с ошибкой анализа при анализе XML, потому что существуют незаконные символы. После прочтения инструкций XML подробно, я обнаружил, что <> '"и не допускается как XML PCData. Чтобы использовать эти символы, они должны быть заменены встроенными объектами:
Организация цитирует персонажи
<<
>>
& &
"
''
Поэтому наиболее прямым способом является контроль над ним самостоятельно, преобразовать специальные символы в ссылки на объекты при написании в файл XML, а затем повернуть их обратно при чтении. Конечно, есть еще один метод, который должен использовать строки в качестве pcdata, а как CDATA (без тестирования).
Метод использования ссылки на объект слишком неприятен, и мое приложение XML -формат не может быть указан собой, поэтому я должен найти другой метод: кодирование BASE64. Это метод кодирования, обычно используемый для передачи данных в сети. Если вы кодируете персонажей, которые существуют эти нелегальные символы в кодирование Base64, у вас не будет этих символов. Самое главное, что кодированный кодер и декодер представлены в Java API, Base64encoder и Base64decoder, расположенном в Sun.misc. Таким образом, байтовый поток, полученный после сериализации, может быть преобразован в строку. И это также может храниться в XML -файле.
Тем не менее, эти два класса не являются открытыми APIS Sun, и будут предупреждения о компиляции.