Класс XMLEncoder
- Все реализуемые интерфейсы:
AutoCloseable
public class XMLEncoder extends Encoder implements AutoCloseable
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, в котором они представлены как XML-документы, соответствующие версии 1.0 спецификации XML и кодировке UTF-8 набора символов Unicode/ISO 10646. XML-документы, создаваемые классом XMLEncoder, являются:
- Переносимые и устойчивые к версиям: они не зависят от частной реализации какого-либо класса и, как файлы исходного кода Java, могут обмениваться между средами, которые могут иметь разные версии некоторых классов, и между виртуальными машинами различных поставщиков.
- Структурно компактные: Класс
XMLEncoderиспользует алгоритм исключения избыточности, чтобы значения по умолчанию свойств объекта Bean не записывались в поток. - Устойчивые к ошибкам: Неструктурные ошибки в файле, вызванные повреждением файла или изменениями API классов в архиве, остаются локализованными, поэтому читатель может сообщить об ошибке и продолжить загрузку тех частей документа, которые не пострадали от ошибки.
Ниже приведен пример 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" используется для явного указания целевого объекта статического метода или конструктора; его значение — полное имя класса.
- Элементы с тегом "void" выполняются с использованием внешнего контекста в качестве целевого объекта, если целевой объект не определён атрибутом "class".
- Класс String Java обрабатывается особенно и записывается как <string>Привет, мир</string>, где символы строки преобразуются в байты с помощью кодировки UTF-8.
Хотя все графы объектов могут быть записаны с помощью только этих трёх тегов, следующие определения включены, чтобы общие структуры данных можно было выразить более лаконично:
- Имя метода по умолчанию — "new".
- Ссылка на класс Java записывается в форме <class>javax.swing.JButton</class>.
- Экземпляры обертывающих классов для примитивных типов Java записываются с использованием имени примитивного типа в качестве тега. Например, экземпляр класса
Integerможет быть записан как: <int>123</int>. Обратите внимание, что классXMLEncoderиспользует пакет Java reflection, в котором преобразование между примитивными типами Java и их соответствующими "обертывающими классами" обрабатывается внутренним образом. API классаXMLEncoderсам по себе работает только сObject. - В элементе, представляющем метод без аргументов, имя которого начинается с "get", атрибут "method" заменяется атрибутом "property", значение которого получается путём удаления префикса "get" и приведения результата к нижнему регистру.
- В элементе, представляющем метод с одним аргументом, имя которого начинается с "set", атрибут "method" заменяется атрибутом "property", значение которого получается путём удаления префикса "set" и приведения результата к нижнему регистру.
- В элементе, представляющем метод с именем "get", принимающий один целочисленный аргумент, атрибут "method" заменяется атрибутом "index", значение которого равно значению первого аргумента.
- В элементе, представляющем метод с именем "set", принимающий два аргумента, первый из которых — целое число, атрибут "method" заменяется атрибутом "index", значение которого равно значению первого аргумента.
- Ссылка на массив записывается с помощью тега "array". Атрибуты "class" и "length" указывают тип подмассива и его длину соответственно.
Для получения дополнительной информации также можно ознакомиться со статьёй Использование XMLEncoder в The Swing Connection.
- С момента:
- 1.4
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
XMLEncoder |
Создаёт новый кодировщик XML для записи JavaBeans в поток out с использованием XML-кодировки. |
XMLEncoder |
Создаёт новый кодировщик XML для записи JavaBeans в поток out с использованием заданной charset, начиная с заданного indentation. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Этот метод вызывает flush, записывает заключительный постскрипт и затем закрывает выходной поток, связанный с этим потоком. |
void |
flush() |
Этот метод записывает преамбулу, связанную с XML-кодировкой, если она ещё не была записана, а затем записывает все значения, которые были записаны в поток с момента последнего вызова flush. |
Object |
getOwner() |
Получает владельца этого кодировщика. |
void |
setOwner |
Устанавливает владельца этого кодировщика в owner. |
void |
writeExpression |
Записывает выражение, чтобы кодировщик вывел фактический результат при сбросе потока. |
void |
writeObject |
Записывает XML-представление указанного объекта в выходной поток. |
void |
writeStatement |
Записывает утверждение, чтобы кодировщик вывел фактический результат при сбросе потока. |
Методы, объявленные в классе java.beans.Encoder
get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegate
Подробное описание конструкторов
XMLEncoder
public XMLEncoder(OutputStream out)
out с использованием кодировки XML.- Параметры:
-
out- поток, в который будет записано XML-представление объектов - Исключения:
-
IllegalArgumentException- еслиoutявляетсяnull - См. также:
XMLEncoder
public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
out, используя заданную charset, начиная с заданного indentation.- Параметры:
-
out- поток, в который будет записано XML-представление объектов -
charset- имя запрошенной кодировки символов; может быть либо каноническим именем, либо псевдонимом -
declaration- требуется ли генерировать XML-объявление; установить вfalseпри встраивании содержимого в другой XML-документ -
indentation- количество пробелов для отступа всего XML-документа - Исключения:
-
IllegalArgumentException- еслиoutилиcharsetявляетсяnull, или еслиindentationменьше 0 -
IllegalCharsetNameException- если имя кодировки недопустимо -
UnsupportedCharsetException- если в данной виртуальной машине Java нет поддержки указанной кодировки -
UnsupportedOperationException- если загруженная кодировка не поддерживает кодирование - С:
- 1.7
- См. также:
Подробное описание методов
setOwner
public void setOwner(Object owner)
owner.- Параметры:
-
owner- Владелец данного кодировщика. - См. также:
getOwner
public Object getOwner()
- Возвращает:
- Владелец данного кодировщика.
- См. также:
writeObject
public void writeObject(Object o)
- Переопределяет:
-
writeObjectв классеEncoder - Параметры:
-
o- Объект, который нужно записать в поток. - См. также:
writeStatement
public void writeStatement(Statement oldStm)
Этот метод должен вызываться только в контексте инициализации делегата персистентности.
- Переопределяет:
-
writeStatementв классеEncoder - Параметры:
-
oldStm- Оператор, который будет записан в поток. - См. также:
writeExpression
public void writeExpression(Expression oldExp)
Этот метод должен вызываться только в контексте инициализации делегата персистентности или настройки кодировщика для чтения из пакета ресурсов.
Дополнительную информацию о использовании пакетов ресурсов с XMLEncoder см. в Создание интернационализированных приложений,
- Переопределяет:
-
writeExpressionв классеEncoder - Параметры:
-
oldExp- Выражение, которое будет записано в поток. - См. также:
flush
public void flush()
flush. После сброса все внутренние ссылки на значения, записанные в этот поток, очищаются.close
public void close()
flush, записывает заключительную постскрипцию и затем закрывает выходной поток, связанный с этим потоком.- Определено в:
-
closeв интерфейсеAutoCloseable
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.desktop/java/beans/XMLEncoder.html