public class XMLEncoder extends Encoder implements AutoCloseable
XMLEncoder
类是ObjectOutputStream的补充ObjectOutputStream
,可以用于生成JavaBean的文本表示,方式与使用ObjectOutputStream
可以创建Serializable
对象的二进制表示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的默认表示,它们被表示为符合XML规范版本1.0的XML文档和Unicode / ISO 10646字符集的UTF-8字符编码。 由产生的XML文档XMLEncoder
类有:
XMLEncoder
类在XMLEncoder
使用冗余消除算法,以使Bean的属性的默认值不会写入流。 以下是包含swing工具包中的一些用户界面组件的XML存档示例:
<?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
。 有关更多信息,您可能还需要查看Using XMLEncoder , “Swing连接”中的一篇文章。
XMLDecoder
, ObjectOutputStream
Constructor and Description |
---|
XMLEncoder(OutputStream out)
创建一个新的XML编码器
的JavaBeans写出到流
out 使用XML编码。
|
XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
创建一个新的XML编码器
的JavaBeans写出到流
out 使用给定
charset 从给定的起始
indentation 。
|
Modifier and Type | Method and Description |
---|---|
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)
记录声明,以便编码器将在流被冲洗时产生实际的输出。
|
get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegate
public XMLEncoder(OutputStream out)
out
使用XML编码。
out
- 要写入对象的XML表示形式的流
IllegalArgumentException
- 如果
out
是
null
XMLDecoder.XMLDecoder(InputStream)
public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
out
使用给定
charset
从给定的起始
indentation
。
out
- 要写入对象的XML表示形式的流
charset
- 请求的字符集的名称;
可能是规范名称或别名
declaration
- 是否应该生成XML声明;
在将内容嵌入另一个XML文档时将其设置为false
indentation
- 用于缩进整个XML文档的空格字符数
IllegalArgumentException
- 如果
out
或
charset
是
null
,或者如果
indentation
小于0
IllegalCharsetNameException
- 如果
charset
名字是非法的
UnsupportedCharsetException
- 如果在Java虚拟机的此实例中不支持命名的字符集
UnsupportedOperationException
- 如果加载的字符集不支持编码
Charset.forName(String)
public void setOwner(Object owner)
owner
。
owner
- 该编码器的所有者。
getOwner()
public Object getOwner()
setOwner(java.lang.Object)
public void writeObject(Object o)
writeObject
在
Encoder
o
-
o
的对象。
XMLDecoder.readObject()
public void writeStatement(Statement oldStm)
该方法只能在初始化持久性委托的上下文中被调用。
writeStatement
在
Encoder
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
writeExpression
在
Encoder
oldExp
- 将写入流的表达式。
PersistenceDelegate.initialize(java.lang.Class<?>, java.lang.Object, java.lang.Object, java.beans.Encoder)
public void flush()
flush
以来写入流的所有值。
刷新后,将清除写入此流的值的所有内部引用。
public void close()
flush
,写入关闭后缀,然后关闭与此流相关联的输出流。
close
in interface
AutoCloseable