java.applet

java.awt

java.awt.color

java.awt.datatransfer

java.awt.dnd

java.awt.event

java.awt.font

java.awt.geom

java.awt.im

java.awt.im.spi

java.awt.image

java.awt.image.renderable

java.awt.print

java.beans

java.beans.beancontext

java.io

java.lang

java.lang.annotation

java.lang.instrument

java.lang.management

java.lang.ref

java.lang.reflect

java.math

java.net

java.nio

java.nio.channels

java.nio.channels.spi

java.nio.charset

java.nio.charset.spi

java.rmi

java.rmi.activation

java.rmi.dgc

java.rmi.registry

java.rmi.server

java.security

java.security.acl

java.security.cert

java.security.interfaces

java.security.spec

java.sql

java.text

java.util

java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

java.util.jar

java.util.logging

java.util.prefs

java.util.regex

java.util.zip

javax.accessibility

javax.activity

javax.crypto

javax.crypto.interfaces

javax.crypto.spec

javax.imageio

javax.imageio.event

javax.imageio.metadata

javax.imageio.plugins.bmp

javax.imageio.plugins.jpeg

javax.imageio.spi

javax.imageio.stream

javax.management

javax.management.loading

javax.management.modelmbean

javax.management.monitor

javax.management.openmbean

javax.management.relation

javax.management.remote

javax.management.remote.rmi

javax.management.timer

javax.naming

javax.naming.directory

javax.naming.event

javax.naming.ldap

javax.naming.spi

javax.net

javax.net.ssl

javax.print

javax.print.attribute

javax.print.attribute.standard

javax.print.event

javax.rmi

javax.rmi.CORBA

javax.rmi.ssl

javax.security.auth

javax.security.auth.callback

javax.security.auth.kerberos

javax.security.auth.login

javax.security.auth.spi

javax.security.auth.x500

javax.security.cert

javax.security.sasl

javax.sound.midi

javax.sound.midi.spi

javax.sound.sampled

javax.sound.sampled.spi

javax.sql

javax.sql.rowset

javax.sql.rowset.serial

javax.sql.rowset.spi

javax.swing

javax.swing.border

javax.swing.colorchooser

javax.swing.event

javax.swing.filechooser

javax.swing.plaf

javax.swing.plaf.basic

javax.swing.plaf.metal

javax.swing.plaf.multi

javax.swing.plaf.synth

javax.swing.table

javax.swing.text

javax.swing.text

javax.swing.text.parser

javax.swing.text.rtf

javax.swing.tree

javax.swing.undo

javax.transaction

javax.transaction.xa

javax.xml

javax.xml.datatype

javax.xml.namespace

javax.xml.parsers

javax.xml.transform

javax.xml.transform.dom

javax.xml.transform.sax

javax.xml.transform.stream

javax.xml.validation

javax.xml.xpath

org.ietf.jgss

org.omg.CORBA

org.omg.CORBA_2_3

org.omg.CORBA_2_3.portable

org.omg.CORBA.DynAnyPackage

org.omg.CORBA.ORBPackage

org.omg.CORBA.portable

org.omg.CORBA.TypeCodePackage

org.omg.CosNaming

org.omg.CosNaming.NamingContextExtPackage

org.omg.CosNaming.NamingContextPackage

org.omg.Dynamic

org.omg.DynamicAny

org.omg.DynamicAny.DynAnyFactoryPackage

org.omg.DynamicAny.DynAnyPackage

org.omg.IOP

org.omg.IOP.CodecFactoryPackage

org.omg.IOP.CodecPackage

org.omg.Messaging

org.omg.PortableInterceptor

org.omg.PortableInterceptor.ORBInitInfoPackage

org.omg.PortableServer

org.omg.PortableServer.CurrentPackage

org.omg.PortableServer.POAManagerPackage

org.omg.PortableServer.POAPackage

org.omg.PortableServer.portable

org.omg.PortableServer.ServantLocatorPackage

org.omg.SendingContext

org.omg.stub.java.rmi

org.w3c.dom

org.w3c.dom.bootstrap

org.w3c.dom.events

org.w3c.dom.ls

org.xml.sax

org.xml.sax.ext

org.xml.sax.helpers

allclasses-frame

allclasses-noframe

constant-values

deprecated-list

help-doc

JavaTM 2 Platform
Standard Ed. 5.0

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

  • 轻便且版本灵活:它们不依赖于任何类的私有实现,因此,与 Java 源文件类似,可以在某些不同版本的类之间或不同的供应商的 VM 之间交换它们。
  • 结构紧凑XMLEncoder 类在内部使用删减冗余 (redundancy elimination) 算法,因此 Bean 属性的默认值不会被写入流中。
  • 容错性:文件中的非结构性错误(由于文件的破坏或在归档文件中对类进行的 API 更改导致)仍然保持本地化,因此 reader 可以报告错误,并继续加载不受错误影响的那部分文档。

以下是一个 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 语法使用以下约定:
  • 每个元素表示一个方法调用。
  • "object" 标记表示一个表达式,其值被用作参数来封闭元素。
  • "void" 标记表示将要执行的语句,但其结果不会被用作参数来封闭方法。
  • 包含元素的元素使用这些元素作为参数,除非它们有以下标记:"void"。
  • 方法的名称由 "method" 属性表示。
  • XML 的标准 "id" 和 "idref" 属性用于引用以前的表达式,以便处理对象图形中的环形。
  • "class" 属性用于显式指定静态方法的目标或构造方法;其值是类的完全限定名。
  • 如果没有通过 "class" 属性定义目标,则使用外部上下文将带有 "void" 标记的元素作为目标执行。
  • Java 的 String 类被特殊对待并被写入 <string>Hello, world</string>,其中使用 UTF-8 字符编码将字符串的字符转换成字节。

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

  • 默认方法名是 "new"。
  • java 类的引用是以 <class>javax.swing.JButton</class> 形式写入的。
  • 用于 Java 基本类型的包装器类的实例是通过将基本类型的名称用做标记来写入的。例如,Integer 类的实例可以写为:<int>123</int>。注意,XMLEncoder 类使用了 Java 的反射包,在该包中,Java 的基本类型与其相关“包装器类”之间的转换是内部处理的。XMLEncoder 类自身的 API 只处理 Object
  • 在表示 null 方法(其名称以 "get" 开头)的元素中,"method" 属性被 "property" 属性替代,后者的值是通过移除 "get" 前缀并取消所得结果的大写化得到的。
  • 在表示一元方法(其名称以 "set" 开头)的元素中,"method" 属性被 "property" 属性替代,后者的值是通过移除 "set" 前缀并取消所得结果的大写化得到的。
  • 在表示名为 "get" 且使用一个整数参数的方法的元素中,"method" 属性由 "index" 属性替换,后者的值是第一个参数的值。
  • 在表示名为 "set" 且使用两个参数(第一个参数为整数)的方法的元素中,"method" 属性由 "index" 属性替换,后者的值是第一个参数的值。
  • 数组的引用是使用 "array" 标记来编写的。"class" 和 "length" 属性分别指定数组的子类型和它的长度。

有关的更多信息,还可以参阅 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. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策