Java Java.io.ObjectOutputStream annotateProxyClass() 方法

  • 描述

    java.io.ObjectOutputStream.annotateProxyClass(Class<?> cl) ,以将自定义数据与动态代理类的描述符一起存储在流中。
    对于流中的每个唯一代理类描述符,该方法仅被调用一次。 ObjectOutputStream中此方法的默认实现不执行任何操作。
    ObjectInputStream中的相应方法是resolveProxyClass。对于覆盖此方法的ObjectOutputStream的给定子类,ObjectInputStream的相应子类中的resolveProxyClass方法必须读取annotateProxyClass写入的任何数据或对象。
  • 声明

    以下是java.io.ObjectOutputStream.annotateProxyClass()方法的声明。
     protected void annotateProxyClass(Class<?> cl)
  • 参数

    cl用于为其注释自定义数据的代理类。
  • 返回值

    此方法不返回值。
  • 异常

    IOException基础OutputStream抛出的任何异常。
  • 例子

    以下示例显示java.io.ObjectOutputStream.annotateProxyClass()方法的用法。
     
    package com.jc2182;
    import java.io.*;
    
    public class ObjectOutputStreamDemo extends ObjectOutputStream {
    
       public ObjectOutputStreamDemo(OutputStream out) throws IOException {
          super(out);
       }
    
       public static void main(String[] args) {
          int i = 319874;
          
          try {
             // create a new file with an ObjectOutputStream
             FileOutputStream out = new FileOutputStream("test.txt");
             ObjectOutputStreamDemo oout = new ObjectOutputStreamDemo(out);
    
             // write something in the file
             oout.writeInt(i);
             oout.writeInt(1653984);
             oout.flush();
    
             // call annotateProxyClass but it does nothing
             oout.annotateProxyClass(Integer.class);
    
             // create an ObjectInputStream for the file we created before
             ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt"));
    
             // read and print an int
             System.out.println("" + ois.readInt());
    
             // read and print an int
             System.out.println("" + ois.readInt());
          } catch (Exception ex) {
             ex.printStackTrace();
          }
       }
    }
    
    让我们编译并运行以上程序,这将产生以下结果-
     
    319874
    1653984