XMLEncoder类
- java.lang.Object继承
- java.beans.Encoder中
- java.beans.XMLEncoder中
-
所有已实现的接口:
AutoCloseable
公共类XMLEncoder 扩展Encoder 实现AutoCloseable
所述XMLEncoder
类是互补替代ObjectOutputStream
,并且可以用于产生的文本表示的JavaBean以相同的方式,该ObjectOutputStream
可被用来创建的二进制表示Serializable
的对象。例如,以下片段可用于创建提供的JavaBean 及其所有属性的文本表示:XMLEncoder e = new XMLEncoder( 新的BufferedOutputStream( new FileOutputStream(“Test.xml”))); e.writeObject(new JButton(“Hello,world”)); e.close();
尽管它们的API相似,但XMLEncoder
该类专门用于将JavaBean的图形存档为其公共属性的文本表示。与Java源文件一样,以这种方式编写的文档对所涉及的类的实现中的更改具有天然的免疫力。在ObjectOutputStream
继续推荐进程间通信和通用序列化。的
XMLEncoder
类提供了一个默认的外延 的JavaBean S IN它们表示为具有XML规范和Unicode / ISO 10646的字符集的UTF-8字符编码的版本1.0符合XML文档。XMLEncoder
该类生成的XML文档是:- 可移植和版本弹性:它们不依赖于任何类的私有实现,因此,与Java源文件一样,它们可以在可能具有某些类的不同版本的环境之间以及来自不同供应商的VM之间交换。
- 结构紧凑:
XMLEncoder
该类在内部使用冗余消除算法,因此Bean的属性的默认值不会写入流。 - 容错:文件中的非结构性错误,由文件损坏或对归档中的类所做的API更改导致本地化,以便读者可以报告错误并继续加载文档的不是受错误影响。
下面是一个XML存档的示例,其中包含swing工具包中的一些用户界面组件:
-
XML语法使用以下约定:
- 每个元素代表一个方法调用。
- “object”标记表示一个表达式,其值将用作封闭元素的参数。
- “void”标记表示将被执行的语句,但其结果不会用作封闭方法的参数。
- 包含元素的元素将这些元素用作参数,除非它们具有标记:“void”。
- 方法的名称由“method”属性表示。
- XML的标准“id”和“idref”属性用于引用先前的表达式 - 以便处理对象图中的圆形。
- “class”属性用于明确指定静态方法或构造函数的目标; 它的值是类的完全限定名称。
- 如果没有“class”属性定义目标,则使用外部上下文作为目标执行具有“void”标记的元素。
- Java的String类是专门处理的,写成
Hello,world string>,其中字符串的字符使用UTF-8字符编码转换为字节。
尽管可以仅使用这三个标记来编写所有对象图,但是包含以下定义,以便可以更简洁地表达公共数据结构:
- 默认方法名称为“new”。
- 对java类的引用以
javax.swing.JButton class>的形式编写。 - 使用基元类型的名称作为标记来编写Java基元类型的包装类的实例。例如,
Integer
可以编写类的实例:123 int>。请注意, XMLEncoder
该类使用Java的反射包,其中Java的基元类型与其关联的“包装类”之间的转换是在内部处理的。XMLEncoder
类本身的API 仅处理Object
s。 - 在表示名称以“get”开头的nullary方法的元素中,“method”属性被替换为“property”属性,其属性值通过删除“get”前缀并对结果进行decapitalizing来给出。
- 在表示名称以“set”开头的monadic方法的元素中,“method”属性被替换为“property”属性,该属性的值通过删除“set”前缀并对结果进行decapital来给出。
- 在表示名为“get”的方法的元素中,取一个整数参数,“method”属性将替换为“index”属性,其值为第一个参数的值。
- 在表示名为“set”的方法的元素中,该方法采用两个参数,第一个是整数,“method”属性替换为“index”属性,其值为第一个参数的值。
- 使用“array”标记写入对数组的引用。“class”和“length”属性分别指定数组的子类型及其长度。
有关更多信息,您可能还需要查看 使用XMLEncoder,这是Swing Connection中的一篇文章。
以来:
1.4
也可以看看:
XMLDecoder
,ObjectOutputStream
-
方法摘要
方法修饰符和类型 方法和描述 void
close()
此方法调用flush
,写入关闭后同步码,然后关闭与此流关联的输出流。void
flush()
如果尚未编写,则此方法会写出与XML编码关联的前导码,然后写出自上次flush
调用以来写入流的所有值。Object
getOwner()
获取此编码器的所有者。void
setOwner(Object owner)
将此编码器的所有者设置为owner
。void
writeExpression(Expression oldExp)
记录表达式,以便在刷新流时编码器将生成实际输出。void
writeObject(Object o)
将指定对象的XML表示写入输出。void
writeStatement(Statement oldStm)
记录Statement,以便在刷新流时Encoder将生成实际输出。-
从类java.beans继承的方法。编码器
get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegate
-
从类java.lang继承的方法。宾语
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
构造函数摘要
构造函数构造函数和描述 XMLEncoder(OutputStream out)
创建一个新的XML编码器,使用XML编码将JavaBeans写入 流中out
。XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
创建一个新的XML编码器,使用给定的给定 开头将JavaBeans写出 到流中。out
charset
indentation
-
方法细节
-
setOwner
public void setOwner(Object owner)
将此编码器的所有者设置为owner
。参数:
owner
- 此编码器的所有者。也可以看看:
getOwner()
-
getOwner
public Object getOwner()
获取此编码器的所有者。返回:
此编码器的所有者。
也可以看看:
setOwner(java.lang.Object)
-
writeObject
public void writeObject(Object o)
将指定对象的XML表示写入输出。覆盖:
writeObject
在班上Encoder
参数:
o
- 要写入流的对象。也可以看看:
XMLDecoder.readObject()
-
writeStatement
public void writeStatement(Statement oldStm)
记录Statement,以便在刷新流时Encoder将生成实际输出。只应在初始化持久委托的上下文中调用此方法。
覆盖:
writeStatement
在班上Encoder
参数:
oldStm
- 将写入流的语句。也可以看看:
PersistenceDelegate.initialize(java.lang.Class>, java.lang.Object, java.lang.Object, java.beans.Encoder)
-
writeExpression
public void writeExpression(Expression oldExp)
记录表达式,以便在刷新流时编码器将生成实际输出。只应在初始化持久委托或设置编码器以从资源包中读取的上下文中调用此方法。
有关将资源包与XMLEncoder一起使用的更多信息,请参阅http://java.sun.com/products/jfc/tsc/articles/persistence4/#i18n
覆盖:
writeExpression
在班上Encoder
参数:
oldExp
- 将写入流的表达式。也可以看看:
PersistenceDelegate.initialize(java.lang.Class>, java.lang.Object, java.lang.Object, java.beans.Encoder)
-
flush
public void flush()
如果尚未编写,则此方法会写出与XML编码关联的前导码,然后写出自上次flush
调用以来写入流的所有值。刷新后,将清除对写入此流的值的所有内部引用。
-
close
public void close()
此方法调用flush
,写入关闭后同步码,然后关闭与此流关联的输出流。具体说明:
close
在界面中AutoCloseable
-
-
构造函数详细信息
-
XMLEncoder
public XMLEncoder(OutputStream out)
创建一个新的XML编码器,使用XML编码将JavaBeans写入 流中out
。参数:
out
- 将写入对象的XML表示的流抛出:
IllegalArgumentException
- 如果out
是的话null
也可以看看:
XMLDecoder.XMLDecoder(InputStream)
-
XMLEncoder
public XMLEncoder(OutputStream out, String charset, 布尔声明, int indentation)
创建一个新的XML编码器,使用给定的给定 开头将JavaBeans写出 到流中。out
charset
indentation
参数:
out
- 将写入对象的XML表示的流charset
- 请求的字符集的名称; 可以是规范名称或别名declaration
- 是否应生成XML声明; 将false
内容嵌入另一个XML文档时设置此项indentation
- 用于缩进整个XML文档的空格字符数抛出:
IllegalArgumentException
- ifout
或charset
isnull
,或者是否indentation
小于0IllegalCharsetNameException
- 如果charset
名字是非法的UnsupportedCharsetException
- 如果在此Java虚拟机实例中不支持指定的charsetUnsupportedOperationException
- 如果加载的charset不支持编码以来:
1.7
也可以看看:
Charset.forName(String)
-
XMLDecoder类
- java.lang.Object继承
- java.beans.XMLDecoder中
-
所有已实现的接口:
AutoCloseable
公共类XMLDecoder extends Object 实现AutoCloseable
在XMLDecoder
类用于读取使用创建的XML文档XMLEncoder
,并使用一样的ObjectInputStream
。例如,可以使用以下片段来读取由XMLEncoder
类编写的XML文档中定义的第一个对象:XMLDecoder d = new XMLDecoder( new BufferedInputStream( new FileInputStream("Test.xml"))); Object result = d.readObject(); d.close();
-
有关更多信息,您可能还需要查看 JavaBeans组件的长期持久性:XML Schema,这是Swing Connection中的一篇文章。
以来:
1.4
也可以看看:
XMLEncoder
,ObjectInputStream
-
方法摘要
方法修饰符和类型 方法和描述 void
close()
此方法关闭与此流关联的输入流。static DefaultHandler
createHandler(Object owner, ExceptionListener el, ClassLoader cl)
为SAX解析器创建一个新的处理程序,可用于解析由XMLEncoder
类创建的嵌入式XML存档。ExceptionListener
getExceptionListener()
获取此流的异常处理程序。Object
getOwner()
获取此解码器的所有者。Object
readObject()
从基础输入流中读取下一个对象。void
setExceptionListener(ExceptionListener exceptionListener)
将此流的异常处理程序设置为exceptionListener
。void
setOwner(Object owner)
将此解码器的所有者设置为owner
。-
从类java.lang继承的方法。宾语
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
构造函数摘要
构造函数构造函数和描述 XMLDecoder(InputSource is)
创建一个新的解码器来解析由XMLEncoder
类创建的XML存档。XMLDecoder(InputStream in)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。XMLDecoder(InputStream in, Object owner)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。XMLDecoder(InputStream in, Object owner, ExceptionListener exceptionListener)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。XMLDecoder(InputStream in, Object owner, ExceptionListener exceptionListener, ClassLoader cl)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。
-
方法细节
-
close
public void close()
此方法关闭与此流关联的输入流。具体说明:
close
在界面中AutoCloseable
-
setExceptionListener
public void setExceptionListener(ExceptionListener exceptionListener)
将此流的异常处理程序设置为exceptionListener
。当此流捕获可恢复的异常时,将通知异常处理程序。参数:
exceptionListener
- 此流的异常处理程序; 如果null
将使用默认的异常监听器。也可以看看:
getExceptionListener()
-
getExceptionListener
public ExceptionListener getExceptionListener()
获取此流的异常处理程序。返回:
此流的异常处理程序。如果未明确设置,则返回默认异常侦听器。
也可以看看:
setExceptionListener(java.beans.ExceptionListener)
-
readObject
public Object readObject()
从基础输入流中读取下一个对象。返回:
下一个对象读取
抛出:
ArrayIndexOutOfBoundsException
- 如果流不包含任何对象(或没有更多对象)也可以看看:
XMLEncoder.writeObject(java.lang.Object)
-
setOwner
public void setOwner(Object owner)
将此解码器的所有者设置为owner
。参数:
owner
- 此解码器的所有者。也可以看看:
getOwner()
-
getOwner
public Object getOwner()
获取此解码器的所有者。返回:
这个解码器的拥有者。
也可以看看:
setOwner(java.lang.Object)
-
createHandler
public static DefaultHandler createHandler(Object owner, ExceptionListener el, ClassLoader cl)
为SAX解析器创建一个新的处理程序,可用于解析由XMLEncoder
类创建的嵌入式XML存档。owner
如果解析的XML文档包含元素的上下文中的方法调用,则应使用此方法。 null
在这种情况下,该值可能导致非法解析。如果owner
类不包含预期的调用方法,则可能会出现同样的问题。详情请见此处。参数:
owner
- 可以用作元素值的默认处理程序的所有者 el
- 解析器的异常处理程序,或null
使用默认的异常处理程序cl
- 用于实例化对象或null
使用默认类加载器的类加载器返回:
DefaultHandler
SAX解析器的实例以来:
1.7
-
-
构造函数详细信息
-
XMLDecoder
public XMLDecoder(InputStream in)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。参数:
in
- 底层流。也可以看看:
XMLEncoder.XMLEncoder(java.io.OutputStream)
-
XMLDecoder
public XMLDecoder(InputStream in, Object owner)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。参数:
in
- 底层流。owner
- 此流的所有者。
-
XMLDecoder
public XMLDecoder(InputStream in, Object owner, ExceptionListener exceptionListener)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。参数:
in
- 底层流。owner
- 此流的所有者。exceptionListener
- 流的异常处理程序; 如果null
将使用默认的异常监听器。
-
XMLDecoder
public XMLDecoder(InputStream in, Object owner, ExceptionListener exceptionListener, ClassLoader cl)
创建一个新的输入流,用于读取由XMLEncoder
类创建的归档。参数:
in
- 底层流。null
可能会毫无错误地传递,但生成的XMLDecoder将无用owner
- 此流的所有者。null
是一个合法的价值exceptionListener
- 流的异常处理程序,或null
使用默认值cl
- 用于实例化对象的类加载器。null
表示应该使用默认的类加载器以来:
1.5
-
XMLDecoder
public XMLDecoder(InputSource 是)
创建一个新的解码器来解析由XMLEncoder
类创建的XML存档。如果输入源is
是null
,则不会抛出异常并且不执行解析。此行为类似于InputStream
用作参数的其他构造函数的行为。参数:
is
- 要解析的输入源以来:
1.7
-
原始XMLEncoder和XMLDecoder
package com.boonya.xml;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import javax.swing.JButton;
public class XMLParser {
public void decode(String path) throws FileNotFoundException {
XMLDecoder d = new XMLDecoder(new BufferedInputStream(
new FileInputStream(path)));
Object result = d.readObject();
System.out.println(result);
d.close();
}
public void encode(String path) throws FileNotFoundException {
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(
new FileOutputStream(path)));
e.writeObject(new JButton("Hello, world"));
e.close();
}
public static void main(String[] args) throws FileNotFoundException {
XMLParser parser=new XMLParser();
parser.decode("C:\\DEVELOPERS\\Test.xml");
parser.encode("C:\\DEVELOPERS\\Test.xml");
}
}