في المكالمات البعيدة ، يجب نقل المعلمات وقيم الإرجاع عبر الشبكة. يتطلب هذا الاستخدام تسلسلًا لتحويل الكائن إلى دفق بايت ، ثم تخلصه مرة أخرى إلى كائن من أحد الطرفين إلى الآخر.
نظرًا لوجود مقال سابق يذكر Hessian ، سنتحدث هنا لفترة وجيزة عن الفرق بين التسلسل Java و Hessian Serialization.
بادئ ذي بدء ، فإن تسلسل Hessian أكثر كفاءة من تسلسل Java ، ودفق البايت المولد أقصر بكثير. لكن نسبياً ، لا يمكن الاعتماد على تسلسل Java ، وهو ليس شاملاً مثل دعم التسلسل Java. سبب هذا الاختلاف هو النظر في تنفيذها.
دعنا نتحدث عن تسلسل Java أولاً. لن أتحدث عن مبدأ العمل المحدد. سيقوم Java Serialization بتسلسل البيانات الوصفية وبيانات الأعمال لفئة الكائنات التي سيتم تسلسلها من تيار البايت ، وسوف يقوم بتسلسل جميع الأشياء في علاقة الميراث بأكملها. يعد دفق البايت الذي يتسلله وصفًا كاملاً لهيكل الكائن للمحتوى ، والذي يحتوي على جميع المعلومات ، بحيث يكون أقل كفاءة ودفق البايت كبير نسبيًا. ولكن نظرًا لأن كل شيء متسلسل بالفعل ، يمكن القول أنه يمكن نقل كل شيء ، لذلك يكون أيضًا أكثر قابلية للاستخدام وموثوقية.
أما بالنسبة للتسلسل Hessian ، فإن آلية التنفيذ الخاصة بها هي التركيز على البيانات ومرافقة معلومات النوع البسيط. تمامًا مثل INTEGER A = 1 ، سوف يتسلسل Hessian إلى دفق مثل I 1. أنا أمثل INT أو INTEGER ، و 1 هو محتوى البيانات. بالنسبة للكائنات المعقدة ، من خلال آلية انعكاس Java ، يقوم Hessian بتسلسل جميع خصائص الكائن كخريطة ، وإنتاج دفق مثل MorperalNameName1Name1 I 1 PropertyName S stringValue (ربما ، نسيانه بالضبط) ، والذي يحتوي على وصف النوع الأساسي ومحتوى البيانات. أثناء عملية التسلسل ، في حالة ظهور كائن ما من قبل ، سيقوم Hessian بإدراج كتلة مثل مؤشر R مباشرة لتمثيل موضع مرجعي ، وبالتالي التخلص من وقت التسلسل والخروج مرة أخرى. سعر القيام بذلك هو أن Hessian يحتاج إلى التعامل مع أنواع مختلفة بشكل مختلف (لذا فإن Hessian كسول ولا يدعم قصيرًا) ، ويحتاج أيضًا إلى التعامل مع العمليات الخاصة عند مواجهة بعض الأشياء الخاصة (مثل StackTraceElement). وفي الوقت نفسه ، لأنه لا يعمق في التنفيذ لأداء التسلسل ، سيكون هناك بعض التناقضات في بعض المناسبات ، مثل الخرائط التي تم الحصول عليها من خلال التجميع. SynchronizedMap.
يشير التسلسل إلى تسلسل كائن في دفق بايت لسهولة التخزين أو نقل الشبكة ؛ في حين أن التخلص من التهم هو عكس ذلك ، فإن تحويل دفق البايت إلى كائن. ما نستخدمه عادة هو طريقة التسلسل Hessian وطريقة التسلسل Java. تختلف كفاءة وحجم التسلسل لطريقتي التسلسل. انطلاقا من نتائج الاختبار ، هيسيان أفضل. فيما يلي مثال تسلسل هيسيان (لا يوجد ملف IO والشبكة IO ، التسلسل الخالص والخروج):
/** * Serialization Hessian Pure * param Object * return * throws استثناء */بايت ثابت عام [] Serialize (كائن كائن) يلقي الاستثناء {if (object == null) {رمي nullpointerxception () HessianSerializerOutput (OS) ؛ Hessianoutput.writeObject (كائن) ؛ إرجاع Os.TobyTearray () ؛}/** * Deserialization Pure Hessian * param bytes * regurn * @therwes استثناء */كائن ثابت عام deserialize (byte [] bytes) throws {if ( NullPointerException () ؛} bytearrayinputStream = جديد bytearrayinputStream (بايت) ؛ hessianserializerinput hessianinput = new hessianizerinput (IS) ؛ كائن = hessianinput.readobject () ؛ كائن الإرجاع ؛}طريقة شائعة أخرى هي تسلسل Java:
/** * java serialization * param obj * regurn * throws استثناء */بايت ثابت عام [] Serialize (Object OBJ) يلقي الاستثناء {if (obj == null) رمي nullpointerxception () ObjectOutputStream (OS) ؛ Out.writeObject (obj) ؛ return os.tobytearray () ؛}/** * java deserialization * @param بواسطة * return * @therwes استثناء */public static object deserialize (byte [] بواسطة) استثناء {if (بواسطة == nullpointexpection () ؛ bytearrayinputStream (by) ؛ ObjectInputStream في = new ObjectInputStream (IS) ؛ return in.ReadObject () ؛}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.