java.lang.Object
java.beans.Encoder
- 直接已知的子类:
-
XMLEncoder
一个
编码器
是一个可以用来创建文件或流的类,它根据它们的公共API来编码一组JavaBeans的状态。 编码器
与其持久性代理一起,负责将对象图拆分为一系列语句
和表达式
,这些语句和表达式可以用来创建它。子类通常使用一些人类可读的形式(如Java源代码或XML)为这些表达式提供语法。
- 自:
- 1.4
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription返回此流创建的环境中oldInstance
的临时值。获取此流的异常处理程序。getPersistenceDelegate
(Class<?> type) 返回给定类型的持久性代理。删除此实例的条目,返回旧条目。void
setExceptionListener
(ExceptionListener exceptionListener) 将此流的异常处理程序设置为exceptionListener
。void
setPersistenceDelegate
(Class<?> type, PersistenceDelegate delegate) 将指定的持久性代理与给定类型关联。void
writeExpression
(Expression oldExp) 实现首先检查是否已经写入具有此值的表达式。protected void
将指定的对象写入输出流。void
writeStatement
(Statement oldStm) 将语句oldStm
写入流。
-
Constructor Details
-
Encoder
public Encoder()构造一个编码器
。
-
-
Method Details
-
writeObject
将指定的对象写入输出流。序列化形式将表示一系列表达式,其组合效果将在读取输入流时创建一个等效对象。默认情况下,假定对象是具有无参数构造函数的JavaBean,其状态由Introspector
返回的匹配的“setter”和“getter”方法对定义。- 参数:
-
o
- 要写入流的对象。 - 参见:
-
setExceptionListener
将此流的异常处理程序设置为exceptionListener
。当此流捕获可恢复异常时,将通知异常处理程序。- 参数:
-
exceptionListener
- 此流的异常处理程序;如果为null
,将使用默认异常侦听器。 - 参见:
-
getExceptionListener
获取此流的异常处理程序。- 返回:
- 此流的异常处理程序;如果未明确设置,则将返回默认异常侦听器。
- 参见:
-
getPersistenceDelegate
返回给定类型的持久性代理。持久性代理通过按顺序应用以下规则来计算:- 如果使用
setPersistenceDelegate(java.lang.Class<?>, java.beans.PersistenceDelegate)
方法将持久性代理与给定类型关联,则返回它。 - 然后,通过由给定类型的完全限定名称和“PersistenceDelegate”后缀组成的名称查找持久性代理。例如,
Bean
类的持久性代理应命名为BeanPersistenceDelegate
,并位于相同的包中。public class Bean { ... } public class BeanPersistenceDelegate { ... }
返回Bean
类的BeanPersistenceDelegate
类的实例。 - 如果类型为
null
,则返回一个编码null
值的共享内部持久性代理。 - 如果类型是
enum
声明,则返回一个共享内部持久性代理,该代理通过其名称对该枚举的常量进行编码。 - 如果类型是原始类型或相应的包装器,则返回一个共享内部持久性代理,该代理对给定类型的值进行编码。
- 如果类型是数组,则返回一个共享内部持久性代理,该代理对适当类型和长度的数组以及其每个元素进行编码,就好像它们是属性一样。
- 如果类型是代理,则返回一个共享内部持久性代理,该代理通过使用
Proxy.newProxyInstance(java.lang.ClassLoader, java.lang.Class<?>[], java.lang.reflect.InvocationHandler)
方法对代理实例进行编码。 - 如果此类型的
BeanInfo
具有由BeanDescriptor
定义的“persistenceDelegate”属性,则返回此命名属性的值。 - 在所有其他情况下,返回默认持久性代理。默认持久性代理假定类型是一个JavaBean,这意味着它具有默认构造函数,并且其状态可以由
Introspector
类返回的“setter”和“getter”方法的匹配对来描述。默认构造函数是具有具有ConstructorProperties
注释的最大参数数量的构造函数。如果没有构造函数具有ConstructorProperties
注释,则将使用无参数构造函数(没有参数的构造函数)。例如,在以下代码片段中,将使用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
将指定的持久性代理与给定类型关联。- 参数:
-
type
- 指定的持久性代理适用于的对象类 -
delegate
- 给定类型的实例的持久性代理 - 参见:
-
remove
删除此实例的条目,返回旧条目。- 参数:
-
oldInstance
- 应该被删除的条目。 - 返回:
- 被删除的条目。
- 参见:
-
get
在此流创建的环境中为oldInstance
返回一个临时值。持久性代理可以使用其mutatesTo
方法来确定此值是否可以初始化以形成等效对象输出,或者是否必须重新实例化新对象。如果流尚未看到此值,则返回null。- 参数:
-
oldInstance
- 要查找的实例。 - 返回:
- 对象,如果尚未看到对象,则为null。
-
writeStatement
将语句oldStm
写入流。oldStm
应完全根据调用者的环境编写,即目标和所有参数应是正在写入的对象图的一部分。这些表达式代表一系列“发生了什么”表达式,告诉输出流如何生成类似原始对象的对象图。此方法的实现将生成第二个表达式,以表示在读取流时将存在的相同表达式的环境。这只需在目标和所有参数上调用
writeObject
并使用结果构建新表达式即可实现。- 参数:
-
oldStm
- 要写入流的表达式。
-
writeExpression
实现首先检查是否已经写入具有此值的表达式。如果没有,则克隆表达式,使用与writeStatement
相同的过程,并通过调用writeObject
将此表达式的值与克隆表达式的值协调。- 参数:
-
oldExp
- 要写入流的表达式。
-