Learn Typing Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Computer Fundamentals English English Conversations Problem Solving

لم أفهم كود المزامنة في جافا

السلام عليكم، لدي بعض التشويش في المزامنة.

هناك بعض الأشياء غير واضحة بالنسبة لي، أجد بعض الصعوبة في هذا المثال:

import java.io.File; // File هنا قمنا باستدعاء الكلاس
import java.io.FileInputStream; // FileInputStream هنا قمنا باستدعاء الكلاس
import java.io.FileOutputStream; // FileOutputStream هنا قمنا باستدعاء الكلاس
import java.io.ObjectInputStream; // ObjectInputStream هنا قمنا باستدعاء الكلاس
import java.io.ObjectOutputStream; // ObjectOutputStream هنا قمنا باستدعاء الكلاس
import java.io.IOException; // IOException هنا قمنا باستدعاء الكلاس
public class Main {
public static void main(String[] args) {
// e إسمه Editor في كل مرة نقوم فيها بتشغيل البرنامج سيتم إنشاء كائن من الكلاس
Editor e = new Editor();
// لمعرفة إذا كان يوجد ملف يحفظ حالة الكائن أم لا user-prefrences.ser بعدها سيتم البحث عن الملف
if ( new File("./user-prefrences.ser").exists() )
{
// منه e موجوداً سيحاول البرنامج إستعادة حالة الكائن user-prefrences.ser في حال كان الملف
try
{
// في الذاكرة user-prefrences.ser حتى نستطيع إدخال المعلومات الموجودة في الملف FileInputStream هنا قمنا بإنشاء كائن نوعه
FileInputStream fis = new FileInputStream("./user-prefrences.ser");
// في الذاكرة user-prefrences.ser المحفوظ في الملف Editor لنتمكن من إعادة خلق كائن الـ ObjectInputStream هنا قمنا بإنشاء كائن نوعه
ObjectInputStream ois = new ObjectInputStream(fis);
// e و قمنا بتخزين حالته في الكائن Editor هنا قمنا بقراءة حالة الكائن الذي تم خلقه في الذاكرة ككائن من الكلاس
e = (Editor) ois.readObject();
// user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف
fis.close();
ois.close();
// في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح
System.out.println("Deserialized data has been created in the memory");
System.out.println("Language: " + e.language);
System.out.println("Encoding: " + e.encoding);
System.out.println("Font size: " + e.fontSize);
System.out.println("Font family: " + e.fontFamily);
System.out.println("Auto save: " + e.autoSave);
System.out.println("Direction: " + e.direction);
System.out.println("Auto Complete: " + e.autoComplete);
System.out.println();
}
catch(IOException | ClassNotFoundException ex)
{
// في حال حدوث أي خطأ عند محاولة إسترجاع حالة الكائن سيتم عرضعه
System.out.println(ex.getMessage());
}
}
// user-prefrences.ser و حفظها في ملف جديد إسمه e هنا حاولنا تغيير حالة الكائن
try
{
// ( أي قمنا بتغيير إعدادات البرنامج ) e هنا قمنا بتغيير قيم الكائن
e.language = "arabic";
e.encoding = "utf-8";
e.fontSize = "12pt";
e.fontFamily = "tahoma";
e.autoSave = true;
e.direction = "right to left";
// .ser إمتداده ,user-prefrences.ser هنا قمنا بإنشاء ملف إسمه
FileOutputStream fos = new FileOutputStream("./user-prefrences.ser");
// user-prefrences.ser لنتمكن من استخراج حالة أي كائن موجود في الذاكرة و وضعها في الملف ObjectOutputStream هنا قمنا بإنشاء كائن نوعه
ObjectOutputStream oos = new ObjectOutputStream(fos);
// لحفظ الإعدادات التي قمنا بإدخالها user-prefrences.ser في الملف e هنا قمنا بنسخ حالة الكائن
oos.writeObject(e);
// user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف
oos.close();
fos.flush();
fos.close();
// في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح
System.out.println("Serialized data has been saved in the project in a file called user-prefrences.ser");
}
catch(IOException ex)
{
// في حال حدوث أي خطأ عند نسخ البيانات من الذاكرة إلى الملف سيتم عرضه
System.out.println(ex.getMessage());
}
}
}
import java.io.File; // File هنا قمنا باستدعاء الكلاس import java.io.FileInputStream; // FileInputStream هنا قمنا باستدعاء الكلاس import java.io.FileOutputStream; // FileOutputStream هنا قمنا باستدعاء الكلاس import java.io.ObjectInputStream; // ObjectInputStream هنا قمنا باستدعاء الكلاس import java.io.ObjectOutputStream; // ObjectOutputStream هنا قمنا باستدعاء الكلاس import java.io.IOException; // IOException هنا قمنا باستدعاء الكلاس public class Main { public static void main(String[] args) { // e إسمه Editor في كل مرة نقوم فيها بتشغيل البرنامج سيتم إنشاء كائن من الكلاس Editor e = new Editor(); // لمعرفة إذا كان يوجد ملف يحفظ حالة الكائن أم لا user-prefrences.ser بعدها سيتم البحث عن الملف if ( new File("./user-prefrences.ser").exists() ) { // منه e موجوداً سيحاول البرنامج إستعادة حالة الكائن user-prefrences.ser في حال كان الملف try { // في الذاكرة user-prefrences.ser حتى نستطيع إدخال المعلومات الموجودة في الملف FileInputStream هنا قمنا بإنشاء كائن نوعه FileInputStream fis = new FileInputStream("./user-prefrences.ser"); // في الذاكرة user-prefrences.ser المحفوظ في الملف Editor لنتمكن من إعادة خلق كائن الـ ObjectInputStream هنا قمنا بإنشاء كائن نوعه ObjectInputStream ois = new ObjectInputStream(fis); // e و قمنا بتخزين حالته في الكائن Editor هنا قمنا بقراءة حالة الكائن الذي تم خلقه في الذاكرة ككائن من الكلاس e = (Editor) ois.readObject(); // user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف fis.close(); ois.close(); // في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح System.out.println("Deserialized data has been created in the memory"); System.out.println("Language: " + e.language); System.out.println("Encoding: " + e.encoding); System.out.println("Font size: " + e.fontSize); System.out.println("Font family: " + e.fontFamily); System.out.println("Auto save: " + e.autoSave); System.out.println("Direction: " + e.direction); System.out.println("Auto Complete: " + e.autoComplete); System.out.println(); } catch(IOException | ClassNotFoundException ex) { // في حال حدوث أي خطأ عند محاولة إسترجاع حالة الكائن سيتم عرضعه System.out.println(ex.getMessage()); } } // user-prefrences.ser و حفظها في ملف جديد إسمه e هنا حاولنا تغيير حالة الكائن try { // ( أي قمنا بتغيير إعدادات البرنامج ) e هنا قمنا بتغيير قيم الكائن e.language = "arabic"; e.encoding = "utf-8"; e.fontSize = "12pt"; e.fontFamily = "tahoma"; e.autoSave = true; e.direction = "right to left"; // .ser إمتداده ,user-prefrences.ser هنا قمنا بإنشاء ملف إسمه FileOutputStream fos = new FileOutputStream("./user-prefrences.ser"); // user-prefrences.ser لنتمكن من استخراج حالة أي كائن موجود في الذاكرة و وضعها في الملف ObjectOutputStream هنا قمنا بإنشاء كائن نوعه ObjectOutputStream oos = new ObjectOutputStream(fos); // لحفظ الإعدادات التي قمنا بإدخالها user-prefrences.ser في الملف e هنا قمنا بنسخ حالة الكائن oos.writeObject(e); // user-prefrences.ser في الأخير قمنا بقطع كل إتصال قمنا بإجرائه مع الملف oos.close(); fos.flush(); fos.close(); // في حال عدم حدوث أي خطأ, سيتم طباعة الجملة التالية التي تعني أن العملية تمت بنجاح System.out.println("Serialized data has been saved in the project in a file called user-prefrences.ser"); } catch(IOException ex) { // في حال حدوث أي خطأ عند نسخ البيانات من الذاكرة إلى الملف سيتم عرضه System.out.println(ex.getMessage()); } } }

مشكلتي في الكود سطر 17 الذي هو:

if ( new File("./user-prefrences.ser").exists() )
if ( new File("./user-prefrences.ser").exists() )

1- كيف تم إنشاء كائن بدون إسم داخل شرط؟ لم أتذكر انني درست هذا الموضوع في الموقع. و إذا كان موجود في الموقع، أرجو وضع رابط الدرس فربما نسيته.

2- كيف تم استدعاء دالة داخل الشرط بدون ذكر إسم الكائن؟ كذلك لا أتذكر أنني درست هذا الأمر.

3- كيف كتبنا شرط بدون استخدام أي عامل مقارنة (Comparison Operators)؟

4- كيف عرف مفسر الكود أن العبارة الشرطية if هي true أو false لأننا لم نحدده؟

شكراً لك على الجواب، و أتمنى أن تعذرني إذا كانت الاسئلة غبية لأنني لا زلت أتعلم و أجد صعوبة كثيرة في موضوع المزامنة؟

تعليقات 1

أضف تعليق

يجب تسجيل الدخول حتى تتمكن من إضافة تعليق أو رد.

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة