logo

فئة Java.io.ObjectOutputStream في Java | مجموعة 1

يقوم ObjectOutputStream بكتابة أنواع البيانات البدائية والرسوم البيانية لكائنات Java إلى OutputStream. يمكن قراءة الكائنات (إعادة تشكيلها) باستخدام ObjectInputStream. يمكن تحقيق التخزين المستمر للكائنات باستخدام ملف للدفق. 

  • يمكن فقط كتابة الكائنات التي تدعم واجهة java.io.Serializable إلى التدفقات. يتم ترميز فئة كل كائن قابل للتسلسل بما في ذلك اسم الفئة وتوقيع الفئة وقيم حقول ومصفوفات الكائن وإغلاق أي كائنات أخرى تمت الإشارة إليها من الكائنات الأولية.
  • غالبًا ما يتم استخدام Java ObjectOutputStream مع Java ObjectInputStream. يتم استخدام ObjectOutputStream لكتابة كائنات Java ويستخدم ObjectInputStream لقراءة الكائنات مرة أخرى. 

البنائين :   

    ObjectOutputStream () المحمي:قم بتوفير طريقة للفئات الفرعية التي تعيد تنفيذ ObjectOutputStream بالكامل حتى لا تضطر إلى تخصيص البيانات الخاصة المستخدمة للتو من خلال تطبيق ObjectOutputStream هذا.ObjectOutputStream (إخراج OutputStream):ينشئ ObjectOutputStream الذي يكتب إلى OutputStream المحدد. 

طُرق:   



    فئة التعليقات التوضيحية باطلة محمية (الفئة cl):قد تنفذ الفئات الفرعية هذه الطريقة للسماح بتخزين بيانات الفئة في الدفق. بشكل افتراضي هذه الطريقة لا تفعل شيئا. الطريقة المقابلة في ObjectInputStream هي ResolveClass. يتم استدعاء هذه الطريقة مرة واحدة بالضبط لكل فئة فريدة في الدفق. سيتم كتابة اسم الفئة والتوقيع بالفعل في الدفق. يمكن لهذه الطريقة استخدام ObjectOutputStream مجانًا لحفظ أي تمثيل للفئة التي تراها مناسبة (على سبيل المثال بايتات ملف الفئة). يجب أن تقوم طريقة ResolveClass في الفئة الفرعية المقابلة لـ ObjectInputStream بقراءة واستخدام أي بيانات أو كائنات مكتوبة بواسطة annotateClass. 
  Syntax :  protected void annotateClass(Class cl) throws IOException   Parameters:   cl - the class to annotate custom data for   Throws:   IOException 
Java
//Java program demonstrating ObjectOutputStream methods //illustrating annotateClass(Class cl) method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }    public static void main(String[] args) throws IOException  ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  Character c = 'A';    //illustrating annotateClass(Class cl) method  oot.annotateClass(Character.class);    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing the stream  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

الإخراج :  

A
    annotateProxyClass(Class cl) باطلة محمية:قد تقوم الفئات الفرعية بتنفيذ هذه الطريقة لتخزين البيانات المخصصة في الدفق مع واصفات فئات الوكيل الديناميكية. يتم استدعاء هذه الطريقة مرة واحدة بالضبط لكل واصف فئة وكيل فريد في الدفق. التنفيذ الافتراضي لهذه الطريقة في ObjectOutputStream لا يفعل شيئًا.
    الطريقة المقابلة في ObjectInputStream هي ResolveProxyClass. بالنسبة لفئة فرعية معينة من ObjectOutputStream التي تتجاوز هذه الطريقة، يجب على أسلوب ResolveProxyClass في الفئة الفرعية المقابلة من ObjectInputStream قراءة أي بيانات أو كائنات مكتوبة بواسطة annotateProxyClass. 
  Syntax :  protected void annotateProxyClass(Class cl) throws IOException   Parameters:   cl - the proxy class to annotate custom data for   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream  //illustrating annotateProxyClass(Class cl) method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }    public static void main(String[] args) throws IOException   ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);    Character c = 'A';    //illustrating annotateProxyClass(Class cl) method  oot.annotateProxyClass(Character.class);    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

الإخراج :  

A
    إغلاق باطل () :يغلق الدفق. يجب استدعاء هذه الطريقة لتحرير أي موارد مرتبطة بالدفق. 
  Syntax :  public void close() throws IOException   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream  //illustrating close() method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] args) throws IOException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.write(3);    //illustrating close()  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.println(oit.read());  oit.close();  } } 
    الإخراج : 
3
    باطلة الافتراضيWriteObject ():اكتب الحقول غير الثابتة وغير المؤقتة للفئة الحالية إلى هذا الدفق. لا يمكن استدعاء هذا إلا من خلال طريقة writeObject الخاصة بالفئة التي يتم إجراء تسلسل لها. سوف يرمي NotActiveException إذا تم استدعاؤه بطريقة أخرى. 
  Syntax :  public void defaultWriteObject() throws IOException   Throws:   IOException 
Java
//Java program demonstrating ObjectOutputStream //illustrating defaultWriteObject() method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  Character a = 'A';  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.writeChar(a);  oot.flush();    // close the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);    // reading the character  System.out.println(oit.readChar());  } }  class demo implements Serializable   {  String s = 'GeeksfoGeeks';  private void writeObject(ObjectOutputStream out)  throws IOException ClassNotFoundException  {  //demonstrating defaultWriteObject()  out.defaultWriteObject();  }  }  } 

الإخراج :  

A
    استنزاف الفراغ المحمي ():استنزاف أي بيانات مخزنة مؤقتًا في ObjectOutputStream. يشبه التدفق ولكنه لا ينشر التدفق إلى الدفق الأساسي. 
  Syntax :  protected void drain() throws IOException   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream methods //illustrating drain() method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  ObjectOutputStreamDemo obj = new ObjectOutputStreamDemo(oot);    //illustrating drain()  obj.drain();    //closing the underlying stream  oot.close();  fout.close();  } } 
    تمكين منطقي منطقي محمي (تمكين منطقي):تمكين الدفق من استبدال الكائنات الموجودة في الدفق. عند التمكين، يتم استدعاء أسلوب استبدال الكائن لكل كائن يتم إجراء تسلسل له. 
    إذا كان التمكين صحيحًا وكان هناك مدير أمان مثبت، فهذه الطريقة تستدعي أولاً أسلوب checkPermission الخاص بمدير الأمان بإذن SerializablePermission('enableSubstitution') للتأكد من أنه من المقبول تمكين الدفق من استبدال الكائنات في الدفق. 
  Syntax :  protected boolean enableReplaceObject(boolean enable) throws SecurityException   Parameters:   enable - boolean parameter to enable replacement of objects   Returns:   the previous setting before this method was invoked   Throws:   SecurityException
Java
//Java program demonstrating ObjectOutputStream //illustrating enableReplaceObject method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream  {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException  {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  Character c = 'A';    //illustrating enableReplaceObject method  System.out.println(oot.enableReplaceObject(true));    //Write the specified object to the ObjectOutputStream  oot.writeObject(c);    //flushing  oot.flush();    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

الإخراج :  

false A
    ObjectOutputStream.PutField putFields():قم باسترجاع الكائن المستخدم لتخزين الحقول الدائمة مؤقتًا ليتم كتابتها في الدفق. ستتم كتابة الحقول إلى الدفق عند استدعاء طريقة writeFields. 
  Syntax :  public ObjectOutputStream.PutField putFields() throws IOException   Returns:   an instance of the class Putfield that holds the serializable fields   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream //illustrating PutField method import java.io.*; class ObjectOutputStreamDemo {  public static void main(String[] arg) throws IOException  ClassNotFoundException  {  Character a ='A';  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStream oot = new ObjectOutputStream(fout);  oot.writeChar(a);  oot.flush();    // close the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);    // reading the character  System.out.println(oit.readChar());  } } class demo implements Serializable {  private void writeObject(ObjectOutputStream out)  throws IOException ClassNotFoundException  {  // Retrieve the object used to buffer  // persistent fields to be written to the stream  ObjectOutputStream.PutField fields = out.putFields();  } } 

الإخراج :  

A
    استبدال الكائن المحمي (كائن الكائن):ستسمح هذه الطريقة للفئات الفرعية الموثوقة لـ ObjectOutputStream باستبدال كائن بآخر أثناء التسلسل. يتم تعطيل استبدال الكائنات حتى يتم استدعاء EnableReplaceObject. تتحقق طريقة EnableReplaceObject من إمكانية الوثوق في الدفق الذي يطلب الاستبدال. يتم تمرير التواجد الأول لكل كائن مكتوب في دفق التسلسل إلى ReplaceObject. يتم استبدال المراجع اللاحقة للكائن بالكائن الذي تم إرجاعه بواسطة الاستدعاء الأصلي لـ ReplaceObject. للتأكد من عدم كشف الحالة الخاصة للكائنات عن غير قصد، يجوز فقط للتدفقات الموثوقة استخدام ReplaceObject. 
    يتم استدعاء هذه الطريقة مرة واحدة فقط عند مواجهة كل كائن لأول مرة. ستتم إعادة توجيه كافة المراجع اللاحقة للكائن إلى الكائن الجديد. يجب أن تقوم هذه الطريقة بإرجاع الكائن المراد استبداله أو الكائن الأصلي.
    يمكن إرجاع Null ككائن ليتم استبداله ولكنه قد يتسبب في NullReferenceException في الفئات التي تحتوي على مراجع إلى الكائن الأصلي حيث أنها قد تتوقع كائنًا بدلاً من null. 
  Syntax :  protected Object replaceObject(Object obj) throws IOException   Parameters:   obj - the object to be replaced   Returns:   the alternate object that replaced the specified one   Throws:   IOException
Java
//Java program demonstrating ObjectOutputStream //illustrating replaceObject method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  String a = 'forGeeks';  String b = 'Geeks';  //Write the specified object to the ObjectOutputStream  oot.writeObject(a);    //flushing the stream  oot.flush();  oot.enableReplaceObject(true);    //illustrating replaceObject  System.out.print(oot.replaceObject(b));    //closing the stream  oot.close();    FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  oit.close();  } } 

الإخراج :  

GeeksforGeeks
    استخدام باطلةProtocolVersion (إصدار int):حدد إصدار بروتوكول الدفق لاستخدامه عند كتابة الدفق. يوفر هذا الروتين خطافًا لتمكين الإصدار الحالي من التسلسل من الكتابة بتنسيق متوافق مع الإصدار السابق من تنسيق الدفق.
    سيتم بذل كل جهد لتجنب تقديم حالات عدم توافق إضافية مع الإصدارات السابقة؛ ولكن في بعض الأحيان لا يوجد بديل آخر. 
  Syntax :  public void useProtocolVersion(int version) throws IOException   Parameters:   version - use ProtocolVersion from java.io.ObjectStreamConstants.   Throws:   IllegalStateException IllegalArgumentException IOException 
Java
 //Java program demonstrating ObjectOutputStream  //illustrating useProtocolVersion() method import java.io.*; class ObjectOutputStreamDemo extends ObjectOutputStream {  public ObjectOutputStreamDemo(OutputStream out) throws IOException  {  super(out);  }  public static void main(String[] args) throws IOException   ClassNotFoundException   {  FileOutputStream fout = new FileOutputStream('file.txt');  ObjectOutputStreamDemo oot = new ObjectOutputStreamDemo(fout);  String a = 'forGeeks';  String b = 'Geeks';  //illustrating useProtocolVersion()  oot.useProtocolVersion(ObjectStreamConstants.PROTOCOL_VERSION_2);  //Write the specified object to the ObjectOutputStream  oot.writeObject(b);  oot.writeObject(a);  //flushing the stream  oot.flush();  oot.close();  FileInputStream fin = new FileInputStream('file.txt');  ObjectInputStream oit = new ObjectInputStream(fin);  System.out.print(oit.readObject());  System.out.print(oit.readObject());  oit.close();  } } 

الإخراج :  

GeeksforGeeks

المقالة التالية : فئة Java.io.ObjectOutputStream في Java | مجموعة 2


 

شجرة ثنائية
إنشاء اختبار