java.lang.Object java.beans.Encoder java.beans.XMLEncoder
public class XMLEncoder
XMLEncoder
类是 ObjectOutputStream
的互补替换,可用于生成 JavaBean 的文本表示形式,所使用方式与用 ObjectOutputStream
创建 Serializable
对象的二进制表示形式的方式相同。例如,可以使用以下代码片段创建所提供的 JavaBean 及其所有属性的文本表示形式:
XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream("Test.xml"))); e.writeObject(new JButton("Hello, world")); e.close();尽管两者的 API 类似,但
XMLEncoder
类仅设计用于将
JavaBean 的图形归档为其公共属性的文本表示形式。与 Java 源文件类似,以这种方式写入的文档在所涉及类的实现中可自然免除更改。在进程间通信和通用序列化中继续推荐使用
ObjectOutputStream
。
XMLEncoder
类提供 JavaBean 的默认指示,其中它们被表示为符合 1.0 版的 XML 规范和 Unicode/ISO 10646 字符集 UTF-8 字符编码的 XML 文档。由 XMLEncoder
类生成的 XML 文档如下:
XMLEncoder
类在内部使用删减冗余 (redundancy elimination) 算法,因此 Bean 属性的默认值不会被写入流中。 以下是一个 XML 归档文件的示例,它包含 swing 工具包中一些用户界面组件:
<?xml version="1.0" encoding="UTF-8"?> <java version="1.0" class="java.beans.XMLDecoder"> <object class="javax.swing.JFrame"> <void property="name"> <string>frame1</string> </void> <void property="bounds"> <object class="java.awt.Rectangle"> <int>0</int> <int>0</int> <int>200</int> <int>200</int> </object> </void> <void property="contentPane"> <void method="add"> <object class="javax.swing.JButton"> <void property="label"> <string>Hello</string> </void> </object> </void> </void> <void property="visible"> <boolean>true</boolean> </void> </object> </java>XML 语法使用以下约定:
尽管只使用这三个标记就可以写入所有对象图形,但以下定义也包括在内,以便能够更具体地表示普通数据结构:
Integer
类的实例可以写为:<int>123</int>。注意,XMLEncoder
类使用了 Java 的反射包,在该包中,Java 的基本类型与其相关“包装器类”之间的转换是内部处理的。XMLEncoder
类自身的 API 只处理 Object
。 有关的更多信息,还可以参阅 The Swing Connection 中的 Using XMLEncoder 一文。
XMLDecoder
,
ObjectOutputStream
构造方法摘要 | |
---|---|
XMLEncoder(OutputStream out) 使用 XML 编码创建一个新的输出流,将 JavaBeans 发送给流 out 。 |
方法摘要 | |
---|---|
void |
close() 此方法调用 flush ,写入结束后文,然后关闭与此流有关的输出流。 |
void |
flush() 如果还没有写出导言,那么此方法将写出与 XML 编码有关的导言,并随后写出从最后一次调用 flush 以来写入流中的所有值。 |
Object |
getOwner() 获得此编码器的所有者。 |
void |
setOwner(Object owner) 将此编码器的所有者设置为 owner 。 |
void |
writeExpression(Expression oldExp) 记录 Expression,以便 Encoder 在刷新流的缓存时产生实际输出。 |
void |
writeObject(Object o) 将指定对象的 XML 表示形式写入输出中。 |
void |
writeStatement(Statement oldStm) 记录 Statement,以便 Encoder 在刷新流的缓存时产生实际输出。 |
从类 java.beans.Encoder 继承的方法 |
---|
get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegate |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public XMLEncoder(OutputStream out)
out
。
out
- 接收对象的 XML 表示形式的流。
XMLDecoder.XMLDecoder(InputStream)
方法详细信息 |
---|
public void setOwner(Object owner)
owner
。
owner
- 此编码器的所有者。
getOwner()
public Object getOwner()
setOwner(java.lang.Object)
public void writeObject(Object o)
Encoder
中的
writeObject
o
- 要写入流中的对象。
XMLDecoder.readObject()
public void writeStatement(Statement oldStm)
此方法只应在初始化持久委托的上下文中调用。
Encoder
中的
writeStatement
oldStm
- 将写入流中的语句。
PersistenceDelegate.initialize(java.lang.Class
, java.lang.Object, java.lang.Object, java.beans.Encoder)
public void writeExpression(Expression oldExp)
此方法只应在初始化持久委托或设置编码器从资源包中读取数据的上下文中调用。
有关利用 XMLEncoder 使用资源包的更多信息,请参阅 http://java.sun.com/products/jfc/tsc/articles/persistence4/#i18n
Encoder
中的
writeExpression
oldExp
- 将写入流中的表达式。
PersistenceDelegate.initialize(java.lang.Class
, java.lang.Object, java.lang.Object, java.beans.Encoder)
public void flush()
flush
以来写入流中的所有值。在刷新缓存之后,对已写入此流中的值的所有内部引用都被清除。
public void close()
flush
,写入结束后文,然后关闭与此流有关的输出流。