이 문제는 객체를 직렬화하고 XML 파일에 저장 한 다음 XML 파일에서 문자열을 읽고 객체를 사로화하려고하기 때문입니다 (Hadoop MapReduce 프로그램은 jobConf를 통해 객체를 작업 트래커로 전송합니다).
직렬화와 관련하여 :
직렬화 된 데이터를 XML에 직접 저장하면 불법 문자가 있기 때문에 XML을 구문 분석 할 때 구문 분석 오류가 발생했습니다. XML의 지침을 자세히 읽은 후 <> ' ""및 XML PCDATA로 허용되지 않는다는 것을 알았습니다. 이러한 문자를 사용하려면 내장 엔티티로 교체해야합니다.
엔티티 인용 문자
<<
>>
& & & &
"
'' ''
따라서 가장 직접적인 방법은 직접 제어하고 XML 파일에 쓸 때 특수 문자를 엔티티 참조로 변환 한 다음 읽을 때 다시 돌리는 것입니다. 물론, 문자열을 pcdata로 사용하지 않고 cdata (테스트 없음)로 사용하는 또 다른 방법이 있습니다.
엔티티 참조를 사용하는 방법은 너무 번거 롭고 응용 프로그램 XML 형식을 직접 지정할 수 없으므로 다른 방법 인 Base64 인코딩을 찾아야합니다. 이것은 네트워크에서 데이터를 전송하는 데 일반적으로 사용되는 인코딩 방법입니다. 이러한 불법적 인 문자를 Base64 인코딩으로 인코딩하면 이러한 문자가 없습니다. 가장 중요한 것은 인코딩 된 인코더 및 디코더가 SUN.MISC에 위치한 Java API, Base64Encoder 및 Base64decoder에 제공된다는 것입니다. 이런 식으로, 직렬화 후 얻은 바이트 스트림은 문자열로 변환 될 수 있습니다. XML 파일에 저장 될 수도 있습니다.
그러나이 두 클래스는 Sun의 열린 API가 아니며 편집에 대한 경고가있을 것입니다.