JavaTM 2 Platform
Standard Ed. 6

java.beans
类 XMLEncoder

java.lang.Object
  继承者 java.beans.Encoder
      继承者 java.beans.XMLEncoder

public class XMLEncoder
extends Encoder

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 文档如下:

以下是一个 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 语法使用以下约定:

尽管只使用这三个标记就可以写入所有对象图形,但以下定义也包括在内,以便能够更具体地表示普通数据结构:

有关的更多信息,还可以参阅 The Swing Connection 中的 Using XMLEncoder 一文。

从以下版本开始:
1.4
另请参见:
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
 

构造方法详细信息

XMLEncoder

public XMLEncoder(OutputStream out)
使用 XML 编码创建一个新的输出流,将 JavaBeans 发送给流 out

参数:
out - 接收对象的 XML 表示形式的流。
另请参见:
XMLDecoder.XMLDecoder(InputStream)
方法详细信息

setOwner

public void setOwner(Object owner)
将此编码器的所有者设置为 owner

参数:
owner - 此编码器的所有者。
另请参见:
getOwner()

getOwner

public Object getOwner()
获得此编码器的所有者。

返回:
此编码器的所有者。
另请参见:
setOwner(java.lang.Object)

writeObject

public void writeObject(Object o)
将指定对象的 XML 表示形式写入输出中。

覆盖:
Encoder 中的 writeObject
参数:
o - 要写入流中的对象。
另请参见:
XMLDecoder.readObject()

writeStatement

public void writeStatement(Statement oldStm)
记录 Statement,以便 Encoder 在刷新流的缓存时产生实际输出。

此方法只应在初始化持久委托的上下文中调用。

覆盖:
Encoder 中的 writeStatement
参数:
oldStm - 将写入流中的语句。
另请参见:
PersistenceDelegate.initialize(java.lang.Class, java.lang.Object, java.lang.Object, java.beans.Encoder)

writeExpression

public void writeExpression(Expression oldExp)
记录 Expression,以便 Encoder 在刷新流的缓存时产生实际输出。

此方法只应在初始化持久委托或设置编码器从资源包中读取数据的上下文中调用。

有关利用 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)

flush

public void flush()
如果还没有写出导言,那么此方法将写出与 XML 编码有关的导言,并随后写出从最后一次调用 flush 以来写入流中的所有值。在刷新缓存之后,对已写入此流中的值的所有内部引用都被清除。


close

public void close()
此方法调用 flush,写入结束后文,然后关闭与此流有关的输出流。


JavaTM 2 Platform
Standard Ed. 6

提交错误或意见

版权所有 2008 Sun Microsystems, Inc. 保留所有权利。请遵守GNU General Public License, version 2 only