Spec-Zone.ru › OpenJDK 17

Класс 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".
  • Стандартные атрибуты "id" и "idref" XML используются для создания ссылок на предыдущие выражения — для обработки цикличности в графе объектов.
  • Атрибут "class" используется для явного указания целевого объекта статического метода или конструктора; его значением является полное квалифицированное имя класса.
  • Элементы с тегом "void" выполняются с использованием внешнего контекста в качестве целевого объекта, если целевой объект не определён атрибутом "class".
  • Класс String Java обрабатывается особым образом и записывается <string>Привет, мир</string>, где символы строки преобразуются в байты с помощью кодировки UTF-8.

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

  • Название метода по умолчанию — "new".
  • Ссылка на класс Java записывается в форме <class>javax.swing.JButton</class>.
  • Экземпляры обертывающих классов для примитивных типов Java записываются с использованием имени примитивного типа в качестве тега. Например, экземпляр класса Integer может быть записан: <int>123</int>. Обратите внимание, что класс XMLEncoder использует пакет рефлексии Java, в котором преобразование между примитивными типами 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
См. также:
  • 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)
Записывает выражение, чтобы кодировщик сгенерировал фактический вывод при сбросе потока.
void writeObject(Object o)
Записывает XML-представление указанного объекта в выходной поток.
void writeStatement(Statement oldStm)
Записывает оператор, чтобы кодировщик сгенерировал фактический вывод при сбросе потока.

Методы, объявленные в классе 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 с использованием кодировки 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 - если имя кодировки некорректно
UnsupportedCharsetException - если в этой экземпляре виртуальной машины Java нет поддержки заданной кодировки
UnsupportedOperationException - если загруженная кодировка не поддерживает кодирование
С:
1.7
См. также:
  • Charset.forName(String)

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

setOwner

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

getOwner

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

writeObject

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

writeStatement

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

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

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

writeExpression

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

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

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

Переопределяет:
writeExpression в классе Encoder
Параметры:
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, записывает заключительную постскрипту и затем закрывает выходной поток, связанный с этим потоком.
Задано в:
close в интерфейсе AutoCloseable

© 1993, 2021, 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://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/java/beans/XMLEncoder.html

Spec-Zone.ru

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