• 0

كيف نتعامل مع التسلسل Serialization في لغة جافا java

مثال عن ال Serialization في جافا؟ مع توضيح المفهوم

تمّ تعديل بواسطة Wael Aljamal
توضيح السؤال
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

Serialization: التسلسل هو عملية ترجمة بنية بيانات أو حالة كائن إلى تنسيق يمكن تخزينه أو نقله وإعادة بنائه لاحقًا.

في جافا يمكننا تحويل أي بنية معطيات لسلسلة من البايتات، ممت يمكننا من لإرسال البيانات ضمن قنوات الاتصال عبر الشبكة أو تخزين ونقل المعطيات، ونرسلها لحاسوب آخر ثم نقوم بعكس العملية للحصول على البيانات الأصلية.

يستعمل التسلسل عادة مع الأغراض لنقل بياناتها.

طريقة البرمجة، على صنف الغرض الذي نريد عمل Serialization له أن يحقق الواجهة Serializable:

class Muclass implements Serializable {
	...
}

وتضمين المكتبة:

import java.io.Serializable;

والمكتبتبني التاليتين مثلا في حال أردنا كتابة الغرض في ملف:

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

ومثال على دالة تقوم بعمل Serialization وتكتب البيانات في ملف:

private static void writeObject(Serializable shoe) throws IOException { 

	ObjectOutputStream oos = 
		new ObjectOutputStream( new FileOutputStream(new File("obj.ser")));

	oos.writeObject(shoe);
	oos.close();
}

ولقراءة الغرض:

private static Object readObject() throws IOException, ClassNotFoundException {

	ObjectInputStream ois = 
		new ObjectInputStream( new FileInputStream(new File("obj.ser")));
	
	Object obj = ois.readObject();
	return obj;
}

مثال كامل من توثيق w3resources: w3resource.com/java-serialization.

ليكن لدينا صنف عامل يحقق الواجهة:Serializable

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);
   }
}

ولدينا الصنف التالي الذي قوم باختبار عمل السلسلة للكائن من الصنف السابق:

import java.io.*;
public class MySerialize {

   public static void main(String [] args) {
      Employee e = new Employee();
      e.name = "my name";
      e.address = "syria, damascus";
      e.SSN = 1;
      e.number = 100;
      
      try {
         FileOutputStream fileOut =
         new FileOutputStream("/serilas/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in serilas/employee.ser");
      } catch (IOException i) {
         i.printStackTrace();
      }
   }
}

ولإعادة البيانات من الملف نعمل De-serialize:

import java.io.*;
public class MyDeserialize {

   public static void main(String [] args) {
      Employee e = null;
      try {
         FileInputStream fileIn = new FileInputStream("/serilas/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);
   }
}

 

serialize-deserialize-java.png

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

لتحقيق ال Serialization نستخدم الكلاس ObjectOutputStream لإنشاء نسخة من الكائن الموجود في الذاكرة و وضعها في ملف .

يجب القيام بالخطوات التالية :
1 - الكائن الذي تريد حفظ حالته يجب أن يكون في الأساس محققا للواجهة Serializable .
( ملاحظة الواجهة Serializable هي واجهة معرفة في الجافا ولاتحوي أي طرائق ومن اجل تحقيقها يجب كتابة تعليمة الاستيراد للصفوف import java.io.Serializable ).
2 - إنشاء ملف إمتداده ser بواسطة الكلاس FileOutputStream.
3 - تجهيز كائن من الكلاس ObjectOutputStream الذي يستخدم لكتابة حالة الكائن في الملف .
4 - نسخ حالة الكائن الموجود في الذاكرة في هذا الملف بواسطة الدالة writeObject() .
5 - عند الإنتهاء من عملية النسخ نقوم بقطع كل إتصال قمنا بإجرائه مع هذا الملف .
مثال : ليكن لدينا كلاس يعبر عن طالب حقوله الاسم والرقم والمطلوب القيام ب Serialization.

import java.io.Serializable;
public class Student implements Serializable {
  String name;
  int id;
  public Student(String name,int id){
    this.name=name;
    this.id=id;
  }
  
  public void printInformation(){
    System.out.println("name: "+name+" id: "+id);
  }
  
}

الان في main سوف نعرض باقي خطوات السلسة :

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Session2 {

	public static void main(String[] args) {
		Student st=new Student("Alel",1);
		
    try {

   		 FileOutputStream fs = new FileOutputStream("teat.ser");

    	 ObjectOutputStream os = new ObjectOutputStream(fs);

    	 os.writeObject(st);

   		 os.close();
   	    } catch(Exception ex) {
	         ex.printStackTrace();
	      }
   }
}


عند تنفيذ الخطوات السابقة ينشأ ملف بالاسم test.ser

test.png.06adb2a553c93bc875054d4ba3a3d348.png

3 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

ممتاز بارك الله فيكم

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن