English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في Java، التسلسل هو مفهوم حيث يمكننا كتابة حالة الكائن إلى تدفق البايتات، مما يتيح لنا نقلها عبر الشبكة (باستخدام تقنيات مثل JPA وRMI).
التسلسل الكائن-
تأكد من أن هذه الفئة قد قامت بتنفيذ واجهة Serializable.
إنشاءFileOutputStreamالكائن، الذي يمثل الملف الذي سيتم حفظ الكائن فيه (المسار التجريدي).
من خلال إرسال الكائن الذي تم إنشاؤهFileOutputStreamالكائن لإنشاء ObjectOutputStream كائن.
كتابة الكائن في الملف باستخدام طريقة writeObject().
تفسير الكائن
إنشاءFileInputStreamالكائن، الذي يمثل ملف يحتوي على الكائن المتسلسل.
قراءة الكائن من ملف باستخدام طريقة readObject().
استخدام الكائن الذي تم استرداده.
عندما نقوم بتفسير عنصر واحد فقط، سيتم حفظ المتغيرات الكائنة وسيعزز لديها نفس القيمة بعد هذه العملية.
المتغيرات الفورية - لن يتم النظر فيها أبدًاالمتغيرات الفوريةالقيمة (باستثناءها من عملية التسلسل). على سبيل المثال، عندما نعلن عن متغير فوري، سيكون قيمته دائمًا null أو false أو صفر (القيمة الافتراضية) بعد التسلسل.
متغیرهای استاتیک - در طول فرآیند دسریالسازی، آنها حفظ نخواهند شدمتغیرهای استاتیکمقادیر. در واقع، متغیرهای استاتیک نیز سریالیسازی نمیشوند، اما زیرا به این کلاس تعلق دارند. پس از десریالسازی، آنها مقادیر فعلی کلاس را دریافت میکنند.
در این برنامه، ما مقادیر نمونه، متغیرهای استاتیک و موقت کلاس را قبل از десریالسازی تغییر دادیم.
بعد از این فرآیند، مقادیر متغیرهای نمونه مشابه خواهند شد. متغیرهای موقت مقادیر پیشفرض را نشان میدهند، در حالی که متغیرهای استاتیک مقادیر جدید (حال حاضر) کلاس را نشان میدهند.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Student implements Serializable{ private String name; private transient int age; private static int year = 2018; public Student(){ System.out.println("This is a constructor"); this.name = "Krishna"; this.age = 25; } public Student(String name, int age){ this.name = name; this.age = age; } public void display() { System.out.println("Name: " + this.name); System.out.println("Age: " + this.age); System.out.println("Year: " + Student.year); } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setYear(int year) { Student.year = year; } } public class SerializeExample{ public static void main(String args[]) throws Exception{ //أنشئ جسم Student Student std = new Student("Vani", 27); //تحليل معكوس لجسم FileOutputStream fos = new FileOutputStream("e:\\student.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(std); oos.close(); fos.close(); //اطبع البيانات قبل التحليل المعكوس System.out.println("القيمة قبل التحليل المعكوس:"); std.display(); //تغيير قيمة المتغير الثابت std.setYear(2019); //تغيير قيمة المتغير المثلي std.setName("Varada"); //تغيير قيمة المتغير اللحظي std.setAge(19); System.out.println("Object serialized......."); //تحليل معكوس لجسم FileInputStream fis = new FileInputStream("e:\\student.ser"); ObjectInputStream ois = new ObjectInputStream(fis); Student deSerializedStd = (Student) ois.readObject(); System.out.println("Object de-serialized......."); ois.close(); fis.close(); System.out.println("القيمة بعد التحليل المعكوس:"); deSerializedStd.display(); } }
نتيجة الاصدار
القيمة قبل التحليل المعكوس: الاسم: Vani العمر: 27 السنة: 2018 Object serialized...... Object de-serialized...... القيمة بعد التحليل المعكوس: الاسم: Vani العمر: 0 السنة: 2019