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

  • 描述

    java.io.ObjectInputStream.readObject()方法从ObjectInputStream读取一个对象。读取对象的类,类的签名以及该类及其所有超类型的非瞬态和非静态字段的值。可以使用writeObject和readObject方法来覆盖类的默认反序列化。该对象引用的对象是可传递的,因此readObject可以重建对象的完整等效图。
    当根对象的所有字段及其引用的对象都完全还原时,根对象将完全还原。此时,对象验证回调将根据其注册优先级按顺序执行。回调由对象(在readObject特殊方法中)注册,因为它们分别进行了恢复。
    对于InputStream的问题和不应反序列化的类,将引发异常。所有异常对InputStream都是致命的,并使其处于不确定状态;调用者可以忽略或恢复流状态。
  • 声明

    以下是java.io.ObjectInputStream.readObject()方法的声明。
     public final Object readObject()
  • 参数

    不适用
  • 返回值

    此方法返回从流中读取的对象。
  • 异常

    • ClassNotFoundException找不到序列化对象的类。
    • InvalidClassException序列化使用的类出了点问题。
    • StreamCorruptedException流中的控制信息不一致。
    • OptionalDataException在流中找到原始数据,而不是对象。
    • IOException任何与输入/输出相关的常规异常。
  • 例子

    以下示例显示java.io.ObjectInputStream.readObject()方法的用法。
     
    package com.jc2182;
    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