تكمن المشكلة في ذلك في أنني أحاول تسلسل كائن وتخزينه في ملف XML ، ثم اقرأ السلسلة من ملف XML ، وفرس الكائن (برنامج Hadoop MapReduce ينقل الكائن إلى TaskTracker عبر JobConf).
فيما يتعلق بالتسلسل:
عندما أقوم بتخزين البيانات المسلسل مباشرة في XML ، واجهت خطأ تحليل عند تحليل XML لأن هناك شخصيات غير قانونية. بعد قراءة إرشادات XML بالتفصيل ، وجدت أنه <> "ولا يُسمح به كـ XML PCData. لاستخدام هذه الأحرف ، يجب استبدالها بكيانات مدمجة:
كيان اقتباس الأحرف
<<
>>
& & & &
"
'' '
لذلك ، فإن الطريقة الأكثر مباشرة هي التحكم في ذلك بنفسك ، وتحويل الأحرف الخاصة إلى مراجع كيان عند الكتابة إلى ملف XML ، ثم إعادةها مرة أخرى عند القراءة. بالطبع ، هناك طريقة أخرى لا تتمثل في استخدام السلاسل مثل PCData ، ولكن مثل CDATA (لا يوجد اختبار).
إن طريقة استخدام مرجع الكيان مزعجة للغاية ، ولا يمكن تحديد تنسيق تطبيق XML الخاص بي بنفسي ، لذلك يجب أن أجد طريقة أخرى: BASE64 الترميز. هذه طريقة تشفير شائعة الاستخدام لنقل البيانات على الشبكة. إذا قمت بترميز الأحرف الموجودة هذه الأحرف غير القانونية في ترميز BASE64 ، فلن يكون لديك هذه الأحرف. أهم شيء هو أن المشفرات المشفرة ودلو المدافع يتم توفيرها في Java API و Base64encoder و Base64Decoder الموجودة في Sun.Misc. بهذه الطريقة ، يمكن تحويل تيار البايت الذي تم الحصول عليه بعد التسلسل إلى سلسلة. ويمكن أيضًا تخزينها في ملف XML.
ومع ذلك ، فإن هاتين الفئتين ليسا واجهات برمجة التطبيقات المفتوحة لـ Sun ، وستكون هناك تحذيرات للتجميع.