Module  java.desktop
软件包  java.beans

Class Encoder

  • 已知直接子类:
    XMLEncoder


    public class Encoder
    extends Object
    一个Encoder是一个类,可用于创建根据其公共API编写JavaBean集合状态的文件或流。 Encoder与其持久性代表一起负责将对象图分解成一系列可用于创建它的Statement s和Expression s。 子类通常使用一些人类可读的形式(如Java源代码或XML)为这些表达式提供语法。
    从以下版本开始:
    1.4
    • 构造方法详细信息

      • Encoder

        public Encoder​()
    • 方法详细信息

      • writeObject

        protected void writeObject​(Object o)
        将指定的对象写入输出流。 序列化形式将表示一系列表达式,其组合效果将在读取输入流时创建一个等效对象。 默认情况下,该对象被假定为具有空值构造函数的JavaBean ,其状态由Introspector返回的匹配的“setter”和“getter”方法对。
        参数
        o - o的对象。
        另请参见:
        XMLDecoder.readObject()
      • setExceptionListener

        public void setExceptionListener​(ExceptionListener exceptionListener)
        将此流的异常处理程序设置为exceptionListener 当此流捕获可恢复的异常时,将通知异常处理程序。
        参数
        exceptionListener - 此流的异常处理程序 如果null将使用默认异常侦听器。
        另请参见:
        getExceptionListener()
      • getPersistenceDelegate

        public PersistenceDelegate getPersistenceDelegate​(Class<?> type)
        返回给定类型的持久代理。 持续委托是按顺序应用以下规则计算的:
        1. 如果使用setPersistenceDelegate(java.lang.Class<?>, java.beans.PersistenceDelegate)方法将持久代理与给定类型相关联,则返回它。
        2. 然后,通过由给定类型的完全限定名称和“PersistenceDelegate”后缀组成的名称查找持久代理。 例如, Bean类的持久Bean应该命名为BeanPersistenceDelegate并位于同一个包中。
            public class Bean { ... }
           public class BeanPersistenceDelegate { ... } 
          BeanPersistenceDelegate类的实例返回给Bean类。
        3. 如果类型为null ,则返回共享内部持久性委托,编码null值。
        4. 如果该类型是一个枚举声明,那么返回一个共享的内部持久性委托,它将通过名称对该枚举的常量进行编码。
        5. 如果类型是原始类型或相应的包装器,则返回共享内部持久性委托,该委托对给定类型的值进行编码。
        6. 如果类型是数组,则返回共享的内部持久性委托,该委托对相应类型和长度的数组进行编码,并将其每个元素视为属性。
        7. 如果类型是代理,则返回使用Proxy.newProxyInstance(java.lang.ClassLoader, java.lang.Class<?>[], java.lang.reflect.InvocationHandler)方法对代理实例进行编码的共享内部持久性委托。
        8. 如果BeanInfo这种类型有一个BeanDescriptor ,其定义的“persistenceDelegate”属性,则返回这个命名属性的值。
        9. 在所有其他情况下,将返回默认持久代理。 默认持久性委托假定该类型是JavaBean ,这意味着它具有默认构造函数,并且其状态可能由Introspector类返回的匹配的“setter”和“getter”方法进行表征 默认构造函数是具有最大数量的参数的构造函数,它具有ConstructorProperties注释。 如果没有一个构造函数具有ConstructorProperties注释,那么将使用nullary构造函数(没有参数的构造函数)。 例如,在下面的代码段,用于在null构造Foo类将被使用,而这两个参数的构造为Bar类将被使用。
            public class Foo {
               public Foo() { ... }
               public Foo(int x) { ... }
           }
           public class Bar {
               public Bar() { ... }
               @ConstructorProperties({"x"})
               public Bar(int x) { ... }
               @ConstructorProperties({"x", "y"})
               public Bar(int x, int y) { ... }
           } 
        参数
        type - 对象的类
        结果
        给定类型的持久代理
        另请参见:
        setPersistenceDelegate(java.lang.Class<?>, java.beans.PersistenceDelegate)Introspector.getBeanInfo(java.lang.Class<?>)BeanInfo.getBeanDescriptor()
      • remove

        public Object remove​(Object oldInstance)
        删除此实例的条目,返回旧条目。
        参数
        oldInstance - 应该删除的条目。
        结果
        已删除的条目。
        另请参见:
        get(java.lang.Object)
      • get

        public Object get​(Object oldInstance)
        在此流创建的环境中返回oldInstance的临时值。 持久mutatesTo可以使用其mutatesTo方法来确定该值是否可以被初始化以在输出处形成等效对象,或者是否必须重新实例化一个新对象。 如果流尚未看到此值,则返回null。
        参数
        oldInstance - 要查找的实例。
        结果
        对象,如果对象以前没有被看见,则为null。
      • writeStatement

        public void writeStatement​(Statement oldStm)
        oldStm写入oldStm oldStm应完全根据调用者环境编写,即目标和所有参数应该是正在写入的对象图的一部分。 这些表达式表示一系列“发生了什么”的表达式,它们告诉输出流如何生成像原始的对象图。

        该方法的实现将产生一个第二个表达式,以便在读取流时将存在的环境中表示相同的表达式。 这通过简单地通过调用目标和所有参数上的writeObject来构建一个新的表达式与结果。

        参数
        oldStm - oldStm的表达式。
      • writeExpression

        public void writeExpression​(Expression oldExp)
        该实现首先检查是否已经写入了具有该值的表达式。 如果不是,则使用与writeStatement相同的过程克隆表达式,并且通过调用writeObject将此表达式的值与克隆表达式的值进行writeObject
        参数
        oldExp - oldExp的表达式。