تعد فئتا ObjectInputStream وObjectOutputStream فئات فرعية من فئتي InputStream وOutputStream على التوالي. تسمى الكائنات التي تم إنشاؤها بواسطة فئتي ObjectInputStream وObjectOutputStream بتدفقات إدخال الكائنات وتدفقات إخراج الكائنات . يستخدم دفق إخراج الكائن طريقة writeObject(Object obj) لكتابة كائن obj إلى ملف، ويستخدم دفق إدخال الكائن readObject() لقراءة كائن في البرنامج.
طرق إنشاء فئتي ObjectInputStream وObjectOutputStream هي كما يلي:
يجب أن يكون مؤشر ObjectOutputStream كائن دفق إخراج، لذا عند التحضير لكتابة كائن إلى ملف، قم أولاً بإنشاء دفق إخراج باستخدام فئة فرعية من OutputStream.
على سبيل المثال، استخدم FileOutputStream لإنشاء دفق إخراج ملف، ويكون الكود كما يلي:
FileOutputStreamfileOut=newFileOutputStream(tom.txt);ObjectOutputStreamobjectout=newObjectOutputStream(fileOut);
وبالمثل، يجب أن يكون مؤشر ObjectInputStream كائن دفق إدخال، لذلك عند التحضير لقراءة كائن من ملف إلى البرنامج، قم أولاً بإنشاء دفق إدخال باستخدام فئة فرعية من InputStream.
على سبيل المثال، استخدم FileInputStream لإنشاء دفق إدخال ملف، ويكون الكود كما يلي:
FileInputStreamfileIn=newFileInputStream(tom.txt);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);
عند استخدام تدفقات الكائنات لكتابة الكائنات أو قراءتها، تأكد من إجراء تسلسل للكائنات، وذلك للتأكد من إمكانية كتابة الكائنات في الملف وإمكانية قراءتها مرة أخرى إلى البرنامج بشكل صحيح.
إذا قامت إحدى الفئات بتطبيق واجهة قابلة للتسلسل (الواجهة في حزمة java.io)، فإن الكائن الذي تم إنشاؤه بواسطة هذه الفئة هو ما يسمى بالكائن المتسلسل. تسمى معظم الكائنات التي توفرها مكتبات فئات Java بالتسلسل. يجب التأكيد على أنه لا توجد طرق في الواجهة القابلة للتسلسل، لذا فإن الفئات التي تنفذ هذه الواجهة لا تحتاج إلى تنفيذ طرق إضافية. شيء آخر يجب ملاحظته هو أنه عند استخدام تدفقات الكائنات لكتابة كائن إلى ملف، لا يجب إجراء تسلسل للكائن فحسب، بل يجب أيضًا إجراء تسلسل للكائنات الأعضاء في الكائن.
الأساليب الموجودة في الواجهة القابلة للتسلسل غير مرئية للبرنامج، لذلك لا تحتاج الفئات التي تنفذ هذه الواجهة إلى تنفيذ طرق إضافية. عند كتابة كائن متسلسل في دفق إخراج الكائن، سيقوم JVM بتنفيذ الأساليب الموجودة في الواجهة القابلة للتسلسل نص بتنسيق معين (معلومات التسلسل للكائن) إلى الوجهة. عندما يقرأ دفق كائن ObjectInputStream كائنًا من ملف، تتم قراءة معلومات التسلسل للكائن مرة أخرى من الملف، ويتم إنشاء كائن بناءً على معلومات التسلسل الخاصة بالكائن.
على سبيل المثال، استخدم تدفقات الكائنات لقراءة وكتابة الكائنات التي تم إنشاؤها بواسطة فئة TV:
TV.java
importjava.io.*;publicclassTVimplementsSerializable{Stringname;intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicintgetPrice(){returnprice;}}
main.java
importjava.io.*;publicclassMain{publicstaticvoidmain(Stringargs[]){TVchanghong=newTV();changhong.setName(Changhong TV);changhong.setPrice(5678);Filefile=newFile(television.txt);try{FileOutputStreamfileOut=newFileOutputStream (ملف);ObjectOutputStreamobjectOut=newObjectOutputStream(fileOut);objectOut.writeObject(changhong);objectOut. Close();FileInputStreamfileIn=newFileInputStream(file);ObjectInputStreamobjectIn=newObjectInputStream(fileIn);TVxinfei=(TV)objectIn.readObject ();objectIn .إغلاق();xinfei.setName(Xinfei TV);xinfei.setPrice(6666);System.out.println(اسم تشانغهونغ:+changhong.getName());System.out.println(سعر تشانغهونغ:+ changhong.getPrice ());System.out.println(اسم xinfei:+xinfei.getName());System.out.println(سعر xinfei:+xinfei.getPrice());}catch(ClassNotFoundExceptionevent){System .out.println( لا يمكن قراءة الكائن)؛}catch(IOExceptionevent){System.out.println(event);}}}