Masalah dengan ini adalah karena saya mencoba membuat serial objek dan menyimpannya dalam file XML, kemudian membaca string dari file XML, dan deserialize objek (program Hadoop MapReduce mentransfer objek ke TaskTracker melalui JobConf).
Mengenai serialisasi:
Ketika saya secara langsung menyimpan data serial di XML, saya mengalami kesalahan penguraian ketika mem -parsing XML karena ada karakter ilegal. Setelah membaca instruksi XML secara detail, saya menemukan bahwa <> '"& tidak diizinkan sebagai xml pcdata. Untuk menggunakan karakter ini, mereka harus diganti dengan entitas bawaan:
Karakter kutipan entitas
<<
>>
& & &
"
''
Oleh karena itu, cara yang paling langsung adalah mengendalikannya sendiri, mengubah karakter khusus menjadi referensi entitas saat menulis ke file XML, dan kemudian mengembalikannya saat membaca. Tentu saja, ada metode lain yang tidak menggunakan string sebagai pcdata, tetapi sebagai cDATA (tidak ada pengujian).
Metode menggunakan referensi entitas terlalu merepotkan, dan format aplikasi XML saya tidak dapat ditentukan oleh diri saya sendiri, jadi saya harus menemukan metode lain: pengkodean base64. Ini adalah metode pengkodean yang biasa digunakan untuk mengirimkan data pada jaringan. Jika Anda menyandikan karakter yang ada karakter ilegal ini ke dalam pengkodean Base64, Anda tidak akan memiliki karakter ini. Yang paling penting adalah bahwa enkoder dan dekoder yang dikodekan disediakan di Java API, Base64Encoder dan Base64Decoder yang terletak di Sun.misc. Dengan cara ini, aliran byte yang diperoleh setelah serialisasi dapat dikonversi menjadi string. Dan itu juga dapat disimpan dalam file XML.
Namun, kedua kelas ini bukan API terbuka Sun, dan akan ada peringatan untuk kompilasi.