Latest web development tutorials

جافا التسلسل

يوفر جافا آلية التسلسل الكائن، الذي يمكن تمثيل كائن كما تتابع بايت، ويشمل تسلسل بايت نوع بيانات الكائن، معلومات عن الكائن ونوع البيانات المخزنة في الجسم .

بعد كتابة الملف إلى كائن تسلسل يمكن أن تقرأ من الملف، ويتم إلغاء تسلسل ذلك، وهذا هو، ونوع المعلومات الكائن والكائنات البيانات، وأنواع البيانات كائن يمكن استخدامها في الذاكرة الكائنات الجديدة.

العملية برمتها هي آلة جافا الافتراضية (JVM) مستقلة، وهذا هو، على كائن منصة تسلسل يمكن إلغاء تسلسل الكائن على منصة مختلفة تماما.

تيارات ObjectInputStream وObjectOutputStream الدرجة الرفيعة المستوى البيانات، التسلسل والأساليب التي تحتوي على أجسام مضادة للتسلسل.

تحتوي الطبقة ObjectOutputStream العديد من طريقة الكتابة لكتابة مجموعة متنوعة من أنواع البيانات، ولكن الاستثناءات بطريقة خاصة:

public final void writeObject(Object x) throws IOException

الأسلوب أعلاه تسلسل كائن وإرسالها إلى دفق إخراج. تحتوي الطبقة ObjectInputStream مماثلة ما يلي إلغاء تسلسل طريقة الكائن:

public final Object readObject() throws IOException, 
                                 ClassNotFoundException

يأخذ هذا الأسلوب الكائن التالي من تيار، ويتم إلغاء تسلسل الكائن. قيمة عودتها هو كائن، لذلك تحتاج إلى تحويله إلى نوع البيانات المناسب.

للتدليل على التسلسل جافا هو كيف يعمل، وسوف تستخدم البرنامج التعليمي فئة الموظف المذكور قبل، وإذا قمنا بتعريف فئة الموظف التالية، التي تطبق الواجهة تسلسل.

public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}

لاحظ أن التسلسل كائن الفئة من أجل تحقيق النجاح، يجب توفر شرطين:

الطبقة يجب أن تنفذ كائن java.io.Serializable.

يجب أن تكون جميع هذه الصفات للتسلسل. إذا كان هناك خاصية ليست للتسلسل، لا بد من ذكر الملكية لفترة وجيزة.

إذا كنت تريد أن تعرف ما إذا كان من الدرجة القياسية للغة جافا هي تسلسل، راجع وثائق لهذه الفئة. اختبار ما إذا كانت حالة يمكن إجراء تسلسل فئة بسيطة جدا، وتحتاج فقط لرؤية الطبقة لم تحقق اجهة java.io.Serializable.


كائن تسلسل

يستخدم الطبقة ObjectOutputStream إلى تسلسل كائن، instantiates SerializeDemo المثال التالي كائن الموظف، والهدف من ذلك هو تسلسل إلى ملف.

بعد تنفيذ هذا البرنامج، يقوم بإنشاء ملف اسمه employee.ser. هذا البرنامج لا يوجد لديه الإخراج، ولكن يمكنك قراءة رمز لفهم دور البرنامج.

ملاحظة: عندما يكون الهدف من ذلك هو تسلسل إلى ملف، وفقا لاتفاقية جافا القياسية هو ملف تمديد .ser.

import java.io.*;

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}

الأشياء إلغاء تسلسل

على سبيل المثال برنامج DeserializeDemo إلغاء التسلسل التالي / تمة / employee.ser المخزنة كائن الموظف.

import java.io.*;
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}

ترجمة وتشغيل البرنامج المذكور أعلاه النتائج على النحو التالي:

Deserialized Employee...
Name: Reyan Ali
Address:Phokka Kuan, Ambehta Peer
SSN: 0
Number:101

هنا يجب أن نشير إلى النقاط التالية:

readObject () طريقة في محاولات حاول / كتلة التقاط لجذب استثناء ClassNotFoundException. لJVM يمكن إلغاء تسلسل كائن، يجب أن تكون قادرة على العثور على الطبقات بايت كود. وإذا تعذر على JVM العثور على الطبقة في كائن عملية إلغاء التسلسل، ورمي استثناء ClassNotFoundException.

لاحظ أن قيمة الإرجاع، يتم تحويل طريقة readObject () لمرجع الموظف.

عند تسلسل كائن، قيمة SSN الملكية 111 222 333، ولكن لأن الخاصية قصيرة، لا يتم إرسال القيمة إلى دفق إخراج. حتى SSN السمة كائن الموظف إلغاء تسلسل هو 0.