模块  java.desktop
软件包  java.beans

Class Encoder

  • 已知直接子类:
    XMLEncoder

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

      • Encoder

        public Encoder()
    • 方法详细信息

      • writeObject

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

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

        public PersistenceDelegate getPersistenceDelegate​(<?> type)
        返回给定类型的持久委托。 通过按顺序应用以下规则来计算持久性委托:
        1. 如果使用setPersistenceDelegate(java.lang.Class<?>, java.beans.PersistenceDelegate)方法将持久委托与给定类型相关联,则返回该委托
        2. 然后,通过由给定类型的完全限定名称和“PersistenceDelegate”后缀组成的名称来查找持久性委托。 例如, 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注释,则将使用无效构造函数(不带参数的构造函数)。 例如,在下面的代码段,用于在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方法来确定是否可以初始化此值以在输出处形成等效对象,或者是否必须重新实例化新对象。 如果流尚未看到此值,则返回null。
        参数
        oldInstance - 要查找的实例。
        结果
        该对象,如果之前未看到该对象,则为null。
      • writeStatement

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

        此方法的实现将生成第二个表达式,以表示在读取流时将存在的环境中的相同表达式。 只需在目标和所有参数上调用writeObject并使用结果构建新表达式即可实现此目的。

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

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