位置:首页 > Java技术 > Java.io包 > Java.io.ObjectInputStream.readObject()方法实例

Java.io.ObjectInputStream.readObject()方法实例

java.io.ObjectInputStream.readObject()方法从ObjectInputStream中读取对象。读取该对象的类,类签名以及类及其所有超类型的非瞬态和非静态字段的值。默认的反序列化的类可以使用writeObject和readObject方法被重写。由此对象引用的对象被传递地读,这样对象的完全等价的图形是由readObject重建。

当所有的字段和对象是引用完全恢复根对象完全恢复。此时对象验证回调是为了根据其注册优先执行。回调是由对象(在特殊的readObject方法)注册,因为它们是单独还原。

异常被抛出的问题与InputStream和对不应该反序列化的类。所有的异常都是致命的InputStream和让它处于不确定状态;是由调用者忽略或恢复流的状态。

声明

以下是java.io.ObjectInputStream.readObject()方法的声明

public final Object readObject()

参数

  • NA

返回值

这个方法从流中读取并返回该对象

异常

  • ClassNotFoundException -- 无法找到一个序列化对象的类。

  • InvalidClassException -- 使用一些错误的序列化的类。

  • StreamCorruptedException -- 流中的控制信息是不一致的。

  • OptionalDataException -- 原始数据,发现数据流,而不是对象。

  • IOException -- 任何常规的输入/输出相关的异常。

例子

下面的示例演示java.io.ObjectInputStream.readObject()方法的用法。

package com.yiibai;

import java.io.*;

public class ObjectInputStreamDemo {

   public static void main(String[] args) {

      String s = "Hello World";
      byte[] b = {'e', 'x', 'a', 'm', 'p', 'l', 'e'};
      try {

         // create a new file with an ObjectOutputStream
         FileOutputStream out = new FileOutputStream("test.txt");
         ObjectOutputStream oout = new ObjectOutputStream(out);

         // write something in the file
         oout.writeObject(s);
         oout.writeObject(b);
         oout.flush();

         // create an ObjectInputStream for the file we created before
         ObjectInputStream ois =
                 new ObjectInputStream(new FileInputStream("test.txt"));

         // read and print an object and cast it as string
         System.out.println("" + (String) ois.readObject());

         // read and print an object and cast it as string
         byte[] read = (byte[]) ois.readObject();
         String s2 = new String(read);
         System.out.println("" + s2);


      } catch (Exception ex) {
         ex.printStackTrace();
      }

   }
}

让我们编译和运行上面的程序,这将产生以下结果:

Hello World
example