أساسيات تسلسل Java
طبّق Serializable، واكتب الكائنات إلى التدفقات باستخدام ObjectOutputStream، ثم اقرأها مجددًا
أساسيات تسلسل Java درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
ما هو تسلسل Java؟
يحوّل التسلسل حالة الكائن إلى تدفق من البايتات بحيث يمكن حفظها على القرص أو إرسالها عبر شبكة أو تخزينها في قاعدة بيانات. أما إلغاء التسلسل فيعكس هذه العملية.
واجهة العلامة Serializable
لتسلسل فئة، نفّذ java.io.Serializable. ولا تحتوي هذه الواجهة على أساليب؛ فهي تشير إلى JVM إلى إمكانية إجراء تسلسل لمثيلات هذه الفئة.
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override public String toString() { return name + " / " + age; }
}كتابة كائن باستخدام ObjectOutputStream
غلّف FileOutputStream داخل ObjectOutputStream واستدعِ writeObject() لإجراء التسلسل.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}قراءة كائن باستخدام ObjectInputStream
غلّف FileInputStream داخل ObjectInputStream واستدعِ readObject() لإلغاء التسلسل. وحوّل النتيجة إلى النوع المتوقع.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}تسلسل رسم بياني للكائنات
يجب أيضًا أن تطبّق جميع الكائنات التي يشير إليها الكائن المُسلسَل Serializable، وإلا فسيُطرح NotSerializableException وقت التشغيل.
public class Order implements Serializable {
private User customer; // User must be Serializable
private List<String> items;
public Order(User customer, List<String> items) {
this.customer = customer;
this.items = items;
}
}NotSerializableException
إذا كان أي حقل في رسم الكائنات البياني غير قابل للتسلسل ولم يُعلَّم بـ transient، فإن Java تطرح NotSerializableException وقت الكتابة.
// Thread is NOT Serializable
public class Task implements Serializable {
private Thread worker; // throws NotSerializableException!
// Fix: mark as transient
private transient Thread worker2;
}رسم الكائنات البياني والمراجع المشتركة
تتتبع Java هوية الكائنات أثناء التسلسل. إذا كان حقلان يشيران إلى الكائن نفسه، تُكتب نسخة واحدة فقط، ويشير كلا الحقلين إلى النسخة نفسها بعد إلغاء التسلسل.
تسلسل المجموعات
تطبّق المجموعات القياسية مثل ArrayList وHashMap وLinkedList واجهة Serializable مسبقًا، لذا تُسلسَل ما دامت عناصرها قابلة للتسلسل.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}الوراثة والتسلسل
إذا كانت الفئة الفائقة تطبّق Serializable، فإن جميع الفئات الفرعية تكون قابلة للتسلسل أيضًا. وإذا لم تكن الفئة الفائقة قابلة للتسلسل، فلن تُحفظ حقولها؛ ويجب أن تحتوي على مُنشئ بلا معاملات حتى يتم إلغاء التسلسل.
التحقق من دفق البايتات
يبدأ دفق البايتات المُسلسَل بالبايتات السحرية 0xACED 0x0005. يمكنكم فحصه باستخدام محرر سداسي عشري، أو فك ترميزه باستخدام أدوات SerialVer لفهم تنسيقه.
تحذير أمني
يُعد إلغاء التسلسل في Java وسيلة معروفة للهجوم. لا تلغوا تسلسل البيانات الواردة من مصادر غير موثوقة من دون التحقق منها. فضّلوا JSON أو Protobuf أو الأغلفة الموقعة للبيانات الخارجية.
اختبار سريع
ما الدالة التي تُسلسِل كائنًا إلى دفق؟
مراجعة
يستخدم تسلسل Java ObjectOutputStream وObjectInputStream. ويجب أن تطبّق الفئات Serializable. تجنّبوا تسلسل البيانات غير الموثوقة، وفضّلوا البدائل الحديثة في الشيفرة الجديدة.
الأسئلة الشائعة
هل درس «أساسيات تسلسل Java» مجاني؟
نعم — نص درس «أساسيات تسلسل Java» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات تسلسل Java»؟
طبّق Serializable، واكتب الكائنات إلى التدفقات باستخدام ObjectOutputStream، ثم اقرأها مجددًا تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات تسلسل Java»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات تسلسل Java
- الحقول transient وserialVersionUID
- التسلسل المخصص: writeObject وreadObject
- البدائل الحديثة: JSON وProtocol Buffers