public class XMLEncoder extends Encoder implements AutoCloseable
XMLEncoder クラスは、ObjectOutputStream の補足的な代替であり、ObjectOutputStream を使って Serializable オブジェクトのバイナリ表現を作成できるのと同じ方法で JavaBean のテキスト表現を生成するために使用できます。たとえば、次のコードでは、提供された 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 と Unicode/ISO 10646 文字セットの UTF-8 文字エンコーディングに準拠した XML 文書として表現するデフォルトの指定を提供します。XMLEncoder クラスによって生成される XML 文書には、次のような特徴があります。
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 構文は、次の規約に準拠しています。
すべてのオブジェクトグラフはこれら 3 つのタグで記述できますが、共通のデータ構造をより簡潔に表現するため、次の定義がなされています。
Integer クラスのインスタンスは <int>123</int> と記述できる。XMLEncoder クラスが、Java プリミティブ型と関連ラッパークラス間の変換を内部的に処理する Java リフレクションパッケージを使用する点に注意すること。XMLEncoder クラスの API 自体は、Object だけを取り扱う。
詳細は、「The Swing Connection」の「Using XMLEncoder」を参照してください。
XMLDecoder, ObjectOutputStream| コンストラクタと説明 |
|---|
XMLEncoder(OutputStream out)
XML エンコーディングを使用して JavaBeans をストリーム
out に書き出すための新しい XML エンコーダを作成します。 |
XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
指定された
charset を使用し、指定された indentation から開始して JavaBeans をストリーム out に書き出すための新しい XML エンコーダを作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
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, setPersistenceDelegatepublic XMLEncoder(OutputStream out)
out に書き出すための新しい XML エンコーダを作成します。out - オブジェクトの XML 表現の書き込み先となるストリームIllegalArgumentException - out が null である場合XMLDecoder.XMLDecoder(InputStream)public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
charset を使用し、指定された indentation から開始して JavaBeans をストリーム out に書き出すための新しい XML エンコーダを作成します。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、クラス: Encodero - ストリームに書き込まれるオブジェクト。XMLDecoder.readObject()public void writeStatement(Statement oldStm)
このメソッドは、持続的な委譲を初期化するコンテキスト内だけで呼び出すようにしてください。
writeStatement、クラス: EncoderoldStm - ストリームに書き込まれる文。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、クラス: EncoderoldExp - ストリームに書き込まれる式。PersistenceDelegate.initialize(java.lang.Class<?>, java.lang.Object, java.lang.Object, java.beans.Encoder)public void flush()
flush を最後に呼び出したときからストリームに書き込まれたすべての値を書き出します。フラッシュ後、このストリームに書き込まれた値の内部参照はすべてクリアーされます。public void close()
flush を呼び出し、閉じるポストアンブルを書き込んでから、このストリームに関連付けられている出力ストリームを閉じます。close、インタフェース: AutoCloseable バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.