في Java ، كل شيء هو كائن ، وفي بيئة موزعة ، غالبًا ما يكون من الضروري تمرير كائن من أحد طرفي الشبكة أو الجهاز إلى الطرف الآخر. هذا يتطلب بروتوكول يمكن أن ينقل البيانات على كلا الطرفين. يتم إنشاء آلية التسلسل Java لحل هذه المشكلة.
بعد تحويل حالة الكائن إلى دفق بايت ، يمكنك حفظه في ملف باستخدام فئات من تدفقات البايت المختلفة في حزمة java.io ، أو الأنابيب في مؤشر ترابط آخر ، أو إرسال بيانات الكائن إلى مضيف آخر من خلال اتصال شبكة. وظيفة تسلسل الكائن بسيطة للغاية وقوية للغاية ، ويستخدم في RMI ، المقبس ، JMS ، و EJB. مشكلة التسلسل الكائن ليست القضية الأكثر أهمية في برمجة الشبكة ، ولكنها مهمة للغاية ولها أهمية عملية كثيرة.
لا يحتفظ بتسلسل كائن Java فقط ببيانات كائن واحد ، ولكن أيضًا يحفظ بشكل متكرر بيانات كل كائن مشار إليه من قبل الكائن. يمكن كتابة التسلسل الهرمي للكائن بأكمله في دفق بايت أو حفظه في ملف أو تمريره على اتصال شبكة. يمكن استخدام تسلسل الكائن لأداء "نسخ عميق" للكائن ، أي نسخ الكائن نفسه والكائن المشار إليه نفسه. يمكن أن يؤدي تسلسل كائن إلى تسلسل الكائن بأكمله.
طريقة الاستخدام الأساسية:
يشير التسلسل إلى استمرار فئة أو نوع بيانات أساسي في دفق بيانات ، بما في ذلك تدفق الملفات ودفق بيانات الشبكة.
يعتمد تنفيذ التسلسل في Java بشكل أساسي على فئتين: ObjectoututStream و ObjectInputStream. وهي فئات فرعية من OutputStream و InputStream في نظام Java IO. نظرًا لأنها تدفقات في Java IO ، يمكنهم تشغيلها مثل الجداول. إليكم كيفية استخدامها:
استيراد java.io.bytearrayinputstream ؛ استيراد java.io.bytearrayoutputstream ؛ استيراد java.io.ioException ؛ استيراد java.io.objectinputStream ؛ استيراد java.io.objectOutputStream ؛ استيراد java.io.serializable ؛ زوج الطبقة العامة يطرح التسلسل {private static final long serialversionuid = -1874850715617681161l ؛ نوع int الخاص ؛ اسم السلسلة الخاصة ؛ public int gettype () {return type ؛ } public void setType (int type) {this.type = type ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } زوج عام (نوع int ، اسم السلسلة) {super () ؛ this.type = type ؛ this.name = name ؛ } إلقاء الفراغ الثابت العام (سلسلة [] args) ioException ، classnotfoundException {// todo method method method tuto cub // serialize bytearrayoutputstream bos = new bytearrayoutputstream () ؛ ObjectOutputStream OOS = New ObjectOutputStream (BOS) ؛ زوج الزوج = زوج جديد (1 ، "charlie") ؛ OOS.WriteObject (زوج) ؛ // كائن deserialize ، احصل على كائن جديد bytearrayinputstream bis = جديد bytearrayinputstream (bos.tobytearray ()) ؛ ObjectInputStream OIS = New ObjectInputStream (BIS) ؛ زوج newPair = (زوج) ois.ReadObject () ؛ System.out.println (newPair.getType ()+":"+newPair.getName ()) ؛ }}1. كلا الفئتين في نمط الديكور. عند إنشائها ، يجب أن يمروا في تيار قائم على البايت. هذه التدفقات هي تلك التي تخزن بالفعل البيانات المسلسل أدناه.
2. يحتاج الطبقة المستمرة إلى تنفيذ الواجهة التسلسلية. لا تحتوي هذه الواجهة على وظائف ، ولكنها مجرد واجهة وضع علامة. إذا تم تنفيذ التسلسل على جهاز واحد ونقل البيانات الناتجة إلى آلة أخرى للتخلص من التسلسل ، فيجب أن تكون الفئات على هاتين الجهازين هي نفسها تمامًا ، وإلا فلن تكون التسلسل ناجحًا.
3. تذكر عدم استخدام tostring للحصول على السلسلة في الكود أعلاه ، ثم الحصول على bytearrayinputstream من هذه السلسلة ، ثم تخلص من ذلك. يتم تخزين BOS في بايت. إن التحويل إلى سلسلة مخزنة في الأحرف سيؤدي حتماً إلى تغييرات في البيانات ، ولن يكون البايت [] المرسوم من السلسلة البايت السابق []. لقد واجهت هذه المشكلة لأنني أريد تخزين البيانات المسلسل في ملف XML. شاهد مقالًا آخر في حولي المحددة لهذه المشكلة:
www.vevb.com/article/88130.htm
ماذا تفعل الجهاز الظاهري Java عند تسلسله وإلغاء التسلسل له؟
تم وصف آلية التسلسل Java في وصف هاتين الفئتين بالتفصيل في Javadoc:
يقتبس
تكتب آلية التسلسل الافتراضية لكائن فئة الكائن ، وتوقيع الفئة ، وقيم جميع الحقول غير المتراكبة وغير المنتظمة. تسبب الإشارات إلى كائنات أخرى (باستثناء الحقول العابرة أو الثابتة) كتابة تلك الكائنات أيضًا. يتم تشفير إشارات متعددة إلى كائن واحد باستخدام آلية مشاركة مرجعية بحيث يمكن استعادة الرسوم البيانية للكائنات بنفس الشكل كما هو الحال عند كتابة الأصل.
تشمل آلية التسلسل الافتراضية البيانات إلى الدفق:
1. الفصل الذي ينتمي إليه الكائن
2. توقيع الفصل
3.
4. الإشارات إلى كائنات أخرى سوف تسبب التسلسل لهذه الكائنات.
5. إذا كانت المراجع المتعددة تشير إلى كائن ، فسيتم استخدام آلية مرجع المشاركة.
يقتبس
يجب أن تنفذ الفصول التي تتطلب معالجة خاصة أثناء عملية التسلسل والفضي طرقًا خاصة مع هذه التوقيعات الدقيقة:
private void readObject (java.io.objectinputStream Stream) يلقي iOexception ، classnotfoundException ؛ private void writeObject (java.io.objectOutputStream) يلقي iOexception private void readobjectnodata () يلقي ObjectStreamException ؛