Spec-Zone.ru › OpenJDK 27

Класс XMLEncoder

java.lang.Object
java.beans.Encoder
java.beans.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>Hello, world</string>, где символы строки преобразуются в байты с использованием кодировки UTF-8.

Хотя любые графы объектов можно записать, используя только эти три тега, ниже приведены определения, позволяющие более кратко описывать распространённые структуры данных:

  • Имя метода по умолчанию — "new".
  • Ссылка на класс Java записывается в виде <class>javax.swing.JButton</class>.
  • Экземпляры классов-обёрток для примитивных типов Java записываются с использованием имени примитивного типа в качестве тега. Например, экземпляр класса Integer можно записать так: <int>123</int>. Обратите внимание, что класс XMLEncoder использует пакет отражения Java, в котором преобразование между примитивными типами Java и соответствующими им «классами-обёртками» выполняется внутренними средствами. Сам API класса XMLEncoder работает только с Objects.
  • В элементе, представляющем метод без аргументов, имя которого начинается с "get", атрибут "method" заменяется атрибутом "property", значение которого получают удалением префикса "get" и преобразованием первой буквы результата в строчную.
  • В элементе, представляющем метод с одним аргументом, имя которого начинается с "set", атрибут "method" заменяется атрибутом "property", значение которого получают удалением префикса "set" и преобразованием первой буквы результата в строчную.
  • В элементе, представляющем метод с именем "get", принимающий один целочисленный аргумент, атрибут "method" заменяется атрибутом "index", значением которого является значение первого аргумента.
  • В элементе, представляющем метод с именем "set", принимающий два аргумента, первый из которых является целым числом, атрибут "method" заменяется атрибутом "index", значением которого является значение первого аргумента.
  • Ссылка на массив записывается с использованием тега "array". Атрибуты "class" и "length" задают соответственно подтип массива и его длину.

Дополнительную информацию можно найти в статье Использование XMLEncoder в The Swing Connection.

Начиная с:
1.4
См. также:
  • XMLDecoder
  • ObjectOutputStream

Краткое описание конструкторов

Конструктор Описание
XMLEncoder(OutputStream out)
Создаёт новый XML-кодировщик для записи JavaBeans в поток out с использованием кодировки XML.
XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
Создаёт новый XML-кодировщик для записи JavaBeans в поток out с использованием заданной charset, начиная с заданного indentation.

Краткое описание методов

Модификатор и тип Метод Описание
void close()
Этот метод вызывает flush, записывает заключительную часть и затем закрывает выходной поток, связанный с этим потоком.
void flush()
Этот метод записывает начальную часть, связанную с кодировкой XML, если она ещё не была записана, а затем записывает все значения, помещённые в поток с момента последнего вызова flush.
Object getOwner()
Возвращает владельца этого кодировщика.
void setOwner(Object owner)
Назначает owner владельцем этого кодировщика.
void writeExpression(Expression oldExp)
Записывает Expression, чтобы кодировщик сформировал фактический вывод при сбросе потока.
void writeObject(Object o)
Записывает XML-представление указанного объекта в выходной поток.
void writeStatement(Statement oldStm)
Записывает Statement, чтобы кодировщик сформировал фактический вывод при сбросе потока.

Методы, объявленные в классе Encoder

get, getExceptionListener, getPersistenceDelegate, remove, setExceptionListener, setPersistenceDelegate
Модификатор и тип Метод Описание
Object get(Object oldInstance)
Возвращает предварительное значение для oldInstance в среде, созданной этим потоком.
ExceptionListener getExceptionListener()
Возвращает обработчик исключений для этого потока.
PersistenceDelegate getPersistenceDelegate(Class<?> type)
Возвращает делегат сохранения для указанного типа.
Object remove(Object oldInstance)
Удаляет запись для этого экземпляра и возвращает прежнюю запись.
void setExceptionListener(ExceptionListener exceptionListener)
Назначает exceptionListener обработчиком исключений для этого потока.
void setPersistenceDelegate(Class<?> type, PersistenceDelegate delegate)
Связывает указанный делегат сохранения с заданным типом.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Показывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удалён в будущей версии.
Финализация устарела и может быть удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Переводит текущий поток в состояние ожидания до пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Переводит текущий поток в состояние ожидания до пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.

Подробное описание конструкторов

XMLEncoder

public XMLEncoder(OutputStream out)
Создаёт новый XML-кодировщик для записи JavaBeans в поток out с использованием кодировки XML.
Параметры:
out — поток, в который будет записано XML-представление объектов
Исключения:
IllegalArgumentException — если out имеет значение null
См. также:
  • XMLDecoder(InputStream)

XMLEncoder

public XMLEncoder(OutputStream out, String charset, boolean declaration, int indentation)
Создаёт новый XML-кодировщик для записи JavaBeans в поток out с использованием заданной charset, начиная с заданного indentation.
Параметры:
out — поток, в который будет записано XML-представление объектов
charset — имя запрошенной кодировки; может быть каноническим именем или псевдонимом
declaration — следует ли создавать объявление XML; установите значение false, если содержимое встраивается в другой XML-документ
indentation — количество пробелов для отступа всего XML-документа
Исключения:
IllegalArgumentException — если out или charset имеет значение null либо если indentation меньше 0
IllegalCharsetNameException — если имя charset недопустимо
UnsupportedCharsetException — если в этом экземпляре виртуальной машины Java отсутствует поддержка указанной кодировки
UnsupportedOperationException — если загруженная кодировка не поддерживает кодирование
Начиная с:
1.7
См. также:
  • Charset.forName(String)

Подробное описание методов

setOwner

public void setOwner(Object owner)
Назначает owner владельцем этого кодировщика.
Параметры:
owner — владелец этого кодировщика.
См. также:
  • getOwner()

getOwner

public Object getOwner()
Возвращает владельца этого кодировщика.
Возвращает:
Владелец этого кодировщика.
См. также:
  • setOwner(Object)

writeObject

public void writeObject(Object o)
Записывает XML-представление указанного объекта в выходной поток.
Переопределяет:
writeObject в классе Encoder
Параметры:
o — объект, который нужно записать в поток.
См. также:
  • XMLDecoder.readObject()

writeStatement

public void writeStatement(Statement oldStm)
Записывает Statement, чтобы кодировщик сформировал фактический вывод при сбросе потока.

Этот метод следует вызывать только в контексте инициализации делегата сохранения.

Переопределяет:
writeStatement в классе Encoder
Параметры:
oldStm — оператор, который будет записан в поток.
См. также:
  • PersistenceDelegate.initialize(Class, Object, Object, Encoder)

writeExpression

public void writeExpression(Expression oldExp)
Записывает Expression, чтобы кодировщик сформировал фактический вывод при сбросе потока.

Этот метод следует вызывать только в контексте инициализации делегата сохранения или настройки кодировщика для чтения из пакета ресурсов.

Дополнительную информацию об использовании пакетов ресурсов с XMLEncoder см. в статье Создание интернационализированных приложений,

Переопределяет:
writeExpression в классе Encoder
Параметры:
oldExp — выражение, которое будет записано в поток.
См. также:
  • PersistenceDelegate.initialize(Class, Object, Object, Encoder)

flush

public void flush()
Этот метод записывает начальную часть, связанную с кодировкой XML, если она ещё не была записана, а затем записывает все значения, помещённые в поток с момента последнего вызова flush. После сброса все внутренние ссылки на значения, записанные в этот поток, удаляются.

close

public void close()
Этот метод вызывает flush, записывает заключительную часть и затем закрывает выходной поток, связанный с этим потоком.
Определено в:
close в интерфейсе AutoCloseable

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API