English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

هل يتم استدعاء بناء الأجسام عند تعرية الأجسام في Java؟

في Java، التفريغ هو مفهوم يمكن من خلاله كتابة حالة الكائن إلى تدفق البايتات لتمكين نقلها عبر الشبكة (استخدام تقنيات مثل JPA وRMI).

تفريغ الكائن-

  • تأكد من أن الفئة قد قامت بتنفيذ واجهة Serializable.

  • أنشئFileOutputStreamكائن يمثل الملف الذي سيتم تخزين الكائن فيه (مسار مجرد).

  • من خلال تمرير الكائن الذي تم إنشاؤهFileOutputStreamكائن لإنشاء كائن ObjectOutputStream.

  • استخدم طريقة writeObject() لتحرير الكائن في الملف.

تفريغ الكائن

  • أنشئFileInputStreamكائن يمثل الملف الذي يحتوي على الكائنات المشهورة.

  • استخدم طريقة readObject() لقراءة الكائن من الملف.

  • استخدم الكائن الذي تم استخراجه.

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

مبنى الكائن و تفريغ الكائن

عندما نقوم بتفسير الكائن، لن يتم دائمًا استدعاء مبنى الكائن. لنأخذ مثالًا على ذلك، هناك فئة تُدعى Student تحتوي على متغيرين استبداديين وأحداث بناء باستخدام قيم مسبقة (استخدام قيم مسبقة) وأحداث بناء م参数يزة.

تظهر دالة display() الخاصة بالفئة القيم الحالية للمتغيرات للنموذج الحالي.
نقوم بإنشاء كائن لفئة Student من خلال تقديم قيمتين (vani و27) ثم قيامنا بتحويلها إلى شكل سلس.
عندما نقوم بفك تشفير هذا الكائن وندعو إلى دالة display() سيتم طباعة القيم التي قمنا بتقديمها. سيتم طباعة المتغيرات الثابتة القيم الجديدة (الحالية) للفئة.

مثال

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
دليل Elasticsearch