Spec-Zone.ru › OpenJDK 27

Класс ObjectOutputStream

java.lang.Object
java.io.OutputStream
java.io.ObjectOutputStream
Все реализуемые интерфейсы:
Closeable, DataOutput, Flushable, ObjectOutput, ObjectStreamConstants, AutoCloseable
public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream. Объекты можно прочитать (восстановить) с помощью ObjectInputStream. Для постоянного хранения объектов можно использовать файл в качестве потока. Если поток является потоком сетевого сокета, объекты можно восстановить на другом хосте или в другом процессе.

В потоки можно записывать только объекты, поддерживающие интерфейс java.io.Serializable. Кодируется класс каждого сериализуемого объекта, включая имя класса и его сигнатуру, значения полей и массивов объекта, а также все объекты, на которые ссылаются исходные объекты.

Для записи объекта в поток используется метод writeObject. С помощью writeObject записывается любой объект, включая строки и массивы. В поток можно записать несколько объектов или примитивных значений. Объекты необходимо считывать из соответствующего ObjectInputstream в тех же типах и в том же порядке, в котором они были записаны.

Примитивные типы данных также можно записывать в поток с помощью соответствующих методов из DataOutput. Строки также можно записывать с помощью метода writeUTF.

Механизм сериализации объекта по умолчанию записывает класс объекта, сигнатуру класса и значения всех нетранзиентных и нестатических полей. Ссылки на другие объекты (кроме ссылок в транзиентных или статических полях) также приводят к записи этих объектов. Несколько ссылок на один объект кодируются с помощью механизма совместного использования ссылок, позволяющего восстановить графы объектов в том же виде, что и при исходной записи.

Например, чтобы записать объект, который можно прочитать примером из ObjectInputStream:

     try (FileOutputStream fos = new FileOutputStream("t.tmp");
          ObjectOutputStream oos = new ObjectOutputStream(fos)) {
         oos.writeObject("Today");
         oos.writeObject(LocalDateTime.now());
     } catch (Exception ex) {
         // handle exception
     }

Сериализуемые классы, требующие специальной обработки в процессе сериализации и десериализации, должны реализовать методы со следующими сигнатурами:

    private void readObject(java.io.ObjectInputStream stream)
        throws IOException, ClassNotFoundException;
    private void writeObject(java.io.ObjectOutputStream stream)
        throws IOException;
    private void readObjectNoData()
        throws ObjectStreamException;

Чтобы метод использовался при сериализации или десериализации, его имя, модификаторы, возвращаемый тип, а также количество и тип параметров должны точно совпадать. Методы должны объявлять возможность выбрасывания только проверяемых исключений, соответствующих этим сигнатурам.

Метод writeObject отвечает за запись состояния объекта для его конкретного класса, чтобы соответствующий метод readObject мог его восстановить. Метод не обязан учитывать состояние суперклассов или подклассов объекта. Состояние сохраняется путем записи отдельных полей в ObjectOutputStream с помощью метода writeObject или методов для примитивных типов данных, поддерживаемых DataOutput.

При сериализации не записываются поля объектов, не реализующих интерфейс java.io.Serializable. Подклассы объектов, не являющихся сериализуемыми, могут быть сериализуемыми. В этом случае у несериализуемого класса должен быть конструктор без аргументов, позволяющий инициализировать его поля. Тогда подкласс отвечает за сохранение и восстановление состояния несериализуемого класса. Часто поля этого класса доступны (public, package или protected) либо существуют методы get и set, которые можно использовать для восстановления состояния.

Сериализацию объекта можно предотвратить, реализовав методы writeObject и readObject, выбрасывающие NotSerializableException. ObjectOutputStream перехватит это исключение и прервет процесс сериализации.

Реализация интерфейса Externalizable позволяет объекту полностью управлять содержимым и форматом его сериализованного представления. Методы интерфейса Externalizable — writeExternal и readExternal — вызываются для сохранения и восстановления состояния объекта. При реализации классом эти методы могут записывать и считывать собственное состояние с помощью всех методов ObjectOutput и ObjectInput. Объекты отвечают за обработку любых изменений версий.

Константы перечисления сериализуются иначе, чем обычные сериализуемые или внешне сериализуемые объекты. Сериализованное представление константы перечисления состоит только из ее имени; значения полей константы не передаются. Для сериализации константы перечисления ObjectOutputStream записывает строку, возвращаемую методом name этой константы. Как и другие сериализуемые или внешне сериализуемые объекты, константы перечисления могут быть целями обратных ссылок, появляющихся далее в потоке сериализации. Процесс сериализации констант перечисления нельзя настроить; любые определенные типами перечислений методы writeObject и writeReplace, специфичные для класса, игнорируются при сериализации. Аналогично игнорируются объявления полей serialPersistentFields и serialVersionUID — для всех типов перечислений значение serialVersionUID фиксировано и равно 0L.

Примитивные данные, за исключением сериализуемых полей и внешне сериализуемых данных, записываются в ObjectOutputStream в записях блочных данных. Запись блочных данных состоит из заголовка и данных. Заголовок блочных данных содержит маркер и количество следующих за заголовком байтов. Последовательные записи примитивных данных объединяются в одну запись блочных данных. Размер блока для записи блочных данных составляет 1024 байта. Каждая запись блочных данных заполняется до 1024 байт либо записывается при выходе из режима блочных данных. Вызовы методов ObjectOutputStream writeObject, defaultWriteObject и writeFields сначала завершают текущую запись блочных данных, если она есть.

Записи сериализуются иначе, чем обычные сериализуемые или внешне сериализуемые объекты; см. раздел сериализация записей.

Начиная с версии:
1.1
Внешние спецификации
  • Спецификация сериализации объектов Java
См. также:
  • DataOutput
  • ObjectInputStream
  • Serializable
  • Externalizable
  • Спецификация сериализации объектов Java, раздел 2, «Классы вывода объектов»

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static class  ObjectOutputStream.PutField
Предоставляет программный доступ к постоянным полям, которые будут записаны в ObjectOutput.

Краткое описание полей

Поля, объявленные в интерфейсе ObjectStreamConstants

baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, SERIAL_FILTER_PERMISSION, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
Модификатор и тип Поле Описание
static final int baseWireHandle
Первый дескриптор в потоке, который будет назначен.
static final int PROTOCOL_VERSION_1
Версия протокола потока.
static final int PROTOCOL_VERSION_2
Версия протокола потока.
static final byte SC_BLOCK_DATA
Битовая маска флага ObjectStreamClass.
static final byte SC_ENUM
Битовая маска флага ObjectStreamClass.
static final byte SC_EXTERNALIZABLE
Битовая маска флага ObjectStreamClass.
static final byte SC_SERIALIZABLE
Битовая маска флага ObjectStreamClass.
static final byte SC_WRITE_METHOD
Битовая маска флага ObjectStreamClass.
static final SerializablePermission SERIAL_FILTER_PERMISSION
Разрешает настройку системного фильтра сериализации.
static final short STREAM_MAGIC
Магическое число, записываемое в заголовок потока.
static final short STREAM_VERSION
Номер версии, записываемый в заголовок потока.
static final SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION
Разрешает переопределение readObject и writeObject.
static final SerializablePermission SUBSTITUTION_PERMISSION
Разрешает замену одного объекта другим во время сериализации/десериализации.
static final byte TC_ARRAY
Новый массив.
static final byte TC_BASE
Первое значение тега.
static final byte TC_BLOCKDATA
Блок дополнительных данных.
static final byte TC_BLOCKDATALONG
Длинный блок данных.
static final byte TC_CLASS
Ссылка на класс.
static final byte TC_CLASSDESC
Новый дескриптор класса.
static final byte TC_ENDBLOCKDATA
Конец блоков дополнительных данных объекта.
static final byte TC_ENUM
Новая константа перечисления.
static final byte TC_EXCEPTION
Исключение при записи.
static final byte TC_LONGSTRING
Длинная строка.
static final byte TC_MAX
Последнее значение тега.
static final byte TC_NULL
Ссылка на объект null.
static final byte TC_OBJECT
Новый объект.
static final byte TC_PROXYCLASSDESC
Новый дескриптор класса-прокси.
static final byte TC_REFERENCE
Ссылка на объект, уже записанный в поток.
static final byte TC_RESET
Сброс контекста потока.
static final byte TC_STRING
Новая строка.

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

ObjectOutputStream()
ObjectOutputStream(OutputStream out)
Модификатор Конструктор Описание
protected
Предоставляет подклассам, полностью переопределяющим ObjectOutputStream, возможность не выделять память под закрытые данные, используемые только данной реализацией ObjectOutputStream.
Создает ObjectOutputStream, записывающий данные в указанный OutputStream.

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

Модификатор и тип Метод Описание
protected void annotateClass(Class<?> cl)
Подклассы могут реализовать этот метод, чтобы сохранять данные класса в потоке.
protected void annotateProxyClass(Class<?> cl)
Подклассы могут реализовать этот метод, чтобы сохранять в потоке пользовательские данные вместе с дескрипторами динамических классов-прокси.
void close()
Закрывает поток.
void defaultWriteObject()
Записывает в этот поток нестатические и нетранзиентные поля текущего класса.
protected void drain()
Записывает все буферизованные данные в ObjectOutputStream.
protected boolean enableReplaceObject(boolean enable)
Разрешает потоку заменять объекты, записываемые в него.
void flush()
Сбрасывает буфер потока.
ObjectOutputStream.PutField putFields()
Возвращает объект, используемый для буферизации постоянных полей, которые будут записаны в поток.
protected Object replaceObject(Object obj)
Этот метод позволяет доверенным подклассам ObjectOutputStream заменять один объект другим во время сериализации.
void reset()
Сброс позволяет не учитывать состояние любых объектов, уже записанных в поток.
void useProtocolVersion(int version)
Задает версию протокола потока, используемую при его записи.
void write(byte[] buf)
Записывает массив байтов.
void write(byte[] buf, int off, int len)
Записывает часть массива байтов.
void write(int val)
Записывает байт.
void writeBoolean(boolean val)
Записывает значение boolean.
void writeByte(int val)
Записывает 8-битное значение byte.
void writeBytes(String str)
Записывает String как последовательность байтов.
void writeChar(int val)
Записывает 16-битное значение char.
void writeChars(String str)
Записывает String как последовательность символов.
protected void writeClassDescriptor(ObjectStreamClass desc)
Записывает указанный дескриптор класса в ObjectOutputStream.
void writeDouble(double val)
Записывает 64-битное значение double.
void writeFields()
Записывает буферизованные поля в поток.
void writeFloat(float val)
Записывает 32-битное значение float.
void writeInt(int val)
Записывает 32-битное значение int.
void writeLong(long val)
Записывает 64-битное значение long.
final void writeObject(Object obj)
Записывает указанный объект в ObjectOutputStream.
protected void writeObjectOverride(Object obj)
Метод, используемый подклассами для переопределения метода writeObject по умолчанию.
void writeShort(int val)
Записывает 16-битное значение short.
protected void writeStreamHeader()
Метод writeStreamHeader предоставлен для того, чтобы подклассы могли добавлять собственный заголовок в начало или конец потока.
void writeUnshared(Object obj)
Записывает в ObjectOutputStream объект без совместного использования ссылок.
void writeUTF(String str)
Запись примитивных данных этой строки в формате модифицированной UTF-8.

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

nullOutputStream
Модификатор и тип Метод Описание
static OutputStream nullOutputStream()
Возвращает новый OutputStream, отбрасывающий все байты.

Методы, объявленные в классе 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, либо до истечения заданного промежутка реального времени.

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

ObjectOutputStream

public ObjectOutputStream(OutputStream out) throws IOException
Создает ObjectOutputStream, выполняющий запись в указанный OutputStream. Этот конструктор записывает заголовок потока сериализации в базовый поток; вызывающей стороне может потребоваться сразу сбросить поток, чтобы конструкторы принимающих ObjectInputStream не блокировались при чтении заголовка.
Параметры:
out — выходной поток для записи
Исключения:
IOException — если при записи заголовка потока произошла ошибка ввода-вывода
NullPointerException — если out равно null
С версии:
1.4
См. также:
  • ObjectOutputStream()
  • putFields()
  • ObjectInputStream(InputStream)

ObjectOutputStream

protected ObjectOutputStream() throws IOException
Позволяет подклассам, полностью переопределяющим ObjectOutputStream, не выделять приватные данные, используемые только этой реализацией ObjectOutputStream.
Исключения:
IOException — если при создании этого потока произошла ошибка ввода-вывода

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

useProtocolVersion

public void useProtocolVersion(int version) throws IOException
Указывает версию протокола потока, используемую при записи потока.

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

Будут приложены все усилия, чтобы не вводить дополнительные нарушения обратной совместимости; однако иногда другого выхода нет.

Параметры:
version — используйте ProtocolVersion из java.io.ObjectStreamConstants.
Исключения:
IllegalStateException — если вызван после сериализации любых объектов.
IllegalArgumentException — если передана недопустимая версия.
IOException — если произошла ошибка ввода-вывода
С версии:
1.2
См. также:
  • ObjectStreamConstants.PROTOCOL_VERSION_1
  • ObjectStreamConstants.PROTOCOL_VERSION_2

writeObject

public final void writeObject(Object obj) throws IOException
Записывает указанный объект в ObjectOutputStream. Записываются класс объекта, сигнатура класса, значения нетранзиентных и нестатических полей класса и всех его суперклассов. Сериализацию класса по умолчанию можно переопределить с помощью методов writeObject и readObject. Объекты, на которые ссылается этот объект, записываются транзитивно, чтобы ObjectInputStream мог восстановить полный эквивалентный граф объектов.

Исключения возникают при проблемах с OutputStream и для классов, которые не должны сериализоваться. Все исключения являются фатальными для OutputStream, который остается в неопределенном состоянии; вызывающая сторона должна решить, игнорировать ли состояние потока или попытаться его восстановить.

Определено в:
writeObject в интерфейсе ObjectOutput
Параметры:
obj — записываемый объект
Исключения:
InvalidClassException — проблема с классом, используемым при сериализации.
NotSerializableException — сериализуемый объект не реализует интерфейс java.io.Serializable.
IOException — любое исключение, выброшенное базовым OutputStream.

writeObjectOverride

protected void writeObjectOverride(Object obj) throws IOException
Метод, используемый подклассами для переопределения метода writeObject по умолчанию. Этот метод вызывается доверенными подклассами ObjectOutputStream, которые создали ObjectOutputStream с помощью защищенного конструктора без аргументов. Ожидается, что подкласс предоставит переопределяющий метод с модификатором "final".
Параметры:
obj — объект для записи в базовый поток
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода
С версии:
1.2
См. также:
  • ObjectOutputStream()
  • writeObject(Object)

writeUnshared

public void writeUnshared(Object obj) throws IOException
Записывает «несовместно используемый» объект в ObjectOutputStream. Этот метод идентичен writeObject, но всегда записывает переданный объект в поток как новый уникальный объект (а не как обратную ссылку на ранее сериализованный экземпляр). В частности:
  • Объект, записанный с помощью writeUnshared, всегда сериализуется так же, как вновь появившийся объект (объект, который еще не записывался в поток), независимо от того, записывался ли объект ранее.
  • Если для записи объекта, ранее записанного с помощью writeUnshared, используется writeObject, предыдущая операция writeUnshared рассматривается как запись отдельного объекта. Иными словами, ObjectOutputStream никогда не создает обратные ссылки на данные объектов, записанные вызовами writeUnshared.
Хотя запись объекта с помощью writeUnshared сама по себе не гарантирует уникальную ссылку на объект при десериализации, она позволяет определить один объект в потоке несколько раз, благодаря чему несколько вызовов readUnshared принимающей стороны не будут конфликтовать. Обратите внимание: описанные выше правила применяются только к объекту базового уровня, записанному с помощью writeUnshared, но не к транзитивно связанным подобъектам в сериализуемом графе объектов.
Параметры:
obj — объект для записи в поток
Исключения:
NotSerializableException — если объект в сериализуемом графе не реализует интерфейс Serializable
InvalidClassException — если возникла проблема с классом сериализуемого объекта
IOException — если во время сериализации произошла ошибка ввода-вывода
С версии:
1.4

defaultWriteObject

public void defaultWriteObject() throws IOException
Записывает в этот поток нестатические и нетранзиентные поля текущего класса. Вызывать этот метод можно только из метода writeObject сериализуемого класса. В противном случае будет выброшено исключение NotActiveException.
Исключения:
IOException — если при записи в базовый OutputStream произошла ошибка ввода-вывода

putFields

public ObjectOutputStream.PutField putFields() throws IOException
Получает объект, используемый для буферизации постоянных полей, которые требуется записать в поток. Поля будут записаны в поток при вызове метода writeFields.
Возвращает:
экземпляр класса Putfield, содержащий сериализуемые поля
Исключения:
IOException — если произошла ошибка ввода-вывода
С версии:
1.2

writeFields

public void writeFields() throws IOException
Записывает буферизованные поля в поток.
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода
NotActiveException — если метод writeObject класса не был вызван для записи состояния объекта.
С версии:
1.2

reset

public void reset() throws IOException
Метод reset игнорирует состояние всех объектов, уже записанных в поток. Состояние сбрасывается до такого же, как у нового ObjectOutputStream. Текущая позиция в потоке помечается как точка сброса, поэтому соответствующий ObjectInputStream сбросит состояние в той же точке. Объекты, ранее записанные в поток, больше не будут считаться уже присутствующими в потоке. Они будут записаны в поток повторно.
Исключения:
IOException — если reset() вызван во время сериализации объекта.

annotateClass

protected void annotateClass(Class<?> cl) throws IOException
Подклассы могут реализовать этот метод, чтобы разрешить сохранение данных класса в потоке. По умолчанию этот метод ничего не делает. Соответствующий метод в ObjectInputStream — resolveClass. Этот метод вызывается ровно один раз для каждого уникального класса в потоке. Имя и сигнатура класса уже будут записаны в поток. Этот метод может свободно использовать ObjectOutputStream для сохранения любого подходящего представления класса (например, байтов файла класса). Метод resolveClass соответствующего подкласса ObjectInputStream должен читать и использовать любые данные или объекты, записанные методом annotateClass.
Параметры:
cl — класс, для которого требуется добавить пользовательские данные
Исключения:
IOException — любое исключение, выброшенное базовым OutputStream.

annotateProxyClass

protected void annotateProxyClass(Class<?> cl) throws IOException
Подклассы могут реализовать этот метод для сохранения в потоке пользовательских данных вместе с дескрипторами динамических классов-прокси.

Этот метод вызывается ровно один раз для каждого уникального дескриптора класса-прокси в потоке. Реализация этого метода по умолчанию в ObjectOutputStream ничего не делает.

Соответствующий метод в ObjectInputStream — resolveProxyClass. Для данного подкласса ObjectOutputStream, переопределяющего этот метод, метод resolveProxyClass соответствующего подкласса ObjectInputStream должен читать любые данные или объекты, записанные методом annotateProxyClass.

Параметры:
cl — класс-прокси, для которого требуется добавить пользовательские данные
Исключения:
IOException — любое исключение, выброшенное базовым OutputStream
С версии:
1.3
См. также:
  • ObjectInputStream.resolveProxyClass(String[])

replaceObject

protected Object replaceObject(Object obj) throws IOException
Этот метод позволяет доверенным подклассам ObjectOutputStream подменять один объект другим во время сериализации. Подмена объектов отключена, пока не будет вызван enableReplaceObject. Метод enableReplaceObject проверяет, заслуживает ли доверия поток, запрашивающий подмену. При первом появлении каждого объекта, записываемого в поток сериализации, он передается методу replaceObject. Последующие ссылки на этот объект заменяются объектом, возвращенным исходным вызовом replaceObject. Чтобы гарантировать, что закрытое состояние объектов не будет непреднамеренно раскрыто, метод replaceObject могут использовать только доверенные потоки.

Метод ObjectOutputStream.writeObject принимает параметр типа Object (а не типа Serializable), чтобы допускать случаи, когда несериализуемые объекты заменяются сериализуемыми.

При подмене объектов подкласс должен гарантировать, что во время десериализации будет выполнена соответствующая подмена или что подставляемый объект совместим с каждым полем, в котором будет сохранена ссылка. Объекты, тип которых не является подтипом типа поля или элемента массива, прерывают сериализацию, вызывая исключение, и не сохраняются.

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

В качестве подставляемого объекта можно вернуть null, однако это может привести к возникновению NullPointerException в классах, содержащих ссылки на исходный объект, если они ожидают объект, а не null.

Параметры:
obj — объект для подмены
Возвращает:
альтернативный объект, заменивший указанный
Исключения:
IOException — любое исключение, выброшенное базовым OutputStream.

enableReplaceObject

protected boolean enableReplaceObject(boolean enable)
Разрешает потоку подменять объекты, записываемые в него. Если подмена разрешена, метод replaceObject(Object) вызывается для каждого сериализуемого объекта.
Параметры:
enable — значение true разрешает использование replaceObject для каждого сериализуемого объекта
Возвращает:
предыдущее значение настройки до вызова этого метода

writeStreamHeader

protected void writeStreamHeader() throws IOException
Метод writeStreamHeader предоставлен для того, чтобы подклассы могли добавлять собственный заголовок в начало или конец потока. Он записывает в поток магическое число и версию.
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeClassDescriptor

protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException
Записывает указанный дескриптор класса в ObjectOutputStream. Дескрипторы классов используются для определения классов объектов, записываемых в поток. Подклассы ObjectOutputStream могут переопределить этот метод, чтобы настроить способ записи дескрипторов классов в поток сериализации. Соответствующий метод ObjectInputStream, readClassDescriptor, следует переопределить, чтобы восстановить дескриптор класса из его пользовательского представления в потоке. По умолчанию этот метод записывает дескрипторы классов в соответствии с форматом, определенным в Спецификации сериализации объектов Java.

Обратите внимание: этот метод вызывается только в том случае, если ObjectOutputStream не использует старый формат потока сериализации (устанавливаемый вызовом метода useProtocolVersion класса ObjectOutputStream). Если этот поток сериализации использует старый формат (PROTOCOL_VERSION_1), дескриптор класса записывается внутренним способом, который нельзя переопределить или настроить.

Параметры:
desc — дескриптор класса для записи в поток
Исключения:
IOException — если произошла ошибка ввода-вывода.
С версии:
1.3
Внешние спецификации
  • Спецификация сериализации объектов Java
См. также:
  • ObjectInputStream.readClassDescriptor()
  • useProtocolVersion(int)
  • ObjectStreamConstants.PROTOCOL_VERSION_1

write

public void write(int val) throws IOException
Записывает байт. Этот метод блокирует выполнение до фактической записи байта.
Определено в:
write в интерфейсе DataOutput
Определено в:
write в интерфейсе ObjectOutput
Определено в:
write в классе OutputStream
Параметры:
val — байт для записи в поток
Исключения:
IOException — если произошла ошибка ввода-вывода.

write

public void write(byte[] buf) throws IOException
Записывает массив байтов. Этот метод блокирует выполнение до фактической записи байтов.
Определено в:
write в интерфейсе DataOutput
Определено в:
write в интерфейсе ObjectOutput
Переопределено:
write в классе OutputStream
Параметры:
buf — записываемые данные
Исключения:
IOException — если произошла ошибка ввода-вывода.
См. также:
  • OutputStream.write(byte[], int, int)

write

public void write(byte[] buf, int off, int len) throws IOException
Записывает часть массива байтов.
Определено в:
write в интерфейсе DataOutput
Определено в:
write в интерфейсе ObjectOutput
Переопределено:
write в классе OutputStream
Параметры:
buf — записываемые данные
off — начальное смещение в данных
len — количество записываемых байтов
Исключения:
IOException — если произошла ошибка ввода-вывода. В частности, IOException выбрасывается, если выходной поток закрыт.
IndexOutOfBoundsException — если off отрицательно, len отрицательно или len больше, чем b.length - off

flush

public void flush() throws IOException
Сбрасывает поток. При этом все буферизованные выходные байты записываются, а сброс передается базовому потоку.
Определено в:
flush в интерфейсе Flushable
Определено в:
flush в интерфейсе ObjectOutput
Переопределено:
flush в классе OutputStream
Исключения:
IOException — если произошла ошибка ввода-вывода.

drain

protected void drain() throws IOException
Записывает все буферизованные данные из ObjectOutputStream. Аналогичен flush, но не передает сброс базовому потоку.
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

close

public void close() throws IOException
Закрывает поток. Этот метод необходимо вызвать, чтобы освободить все ресурсы, связанные с потоком.
Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Closeable
Определено в:
close в интерфейсе ObjectOutput
Переопределено:
close в классе OutputStream
Исключения:
IOException — если произошла ошибка ввода-вывода.

writeBoolean

public void writeBoolean(boolean val) throws IOException
Записывает логическое значение.
Определено в:
writeBoolean в интерфейсе DataOutput
Параметры:
val — записываемое логическое значение
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeByte

public void writeByte(int val) throws IOException
Записывает 8-битный байт.
Определено в:
writeByte в интерфейсе DataOutput
Параметры:
val — записываемое значение байта
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeShort

public void writeShort(int val) throws IOException
Записывает 16-битное значение short.
Определено в:
writeShort в интерфейсе DataOutput
Параметры:
val — записываемое значение short
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeChar

public void writeChar(int val) throws IOException
Записывает 16-битный символ char.
Определено в:
writeChar в интерфейсе DataOutput
Параметры:
val — записываемое значение char
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeInt

public void writeInt(int val) throws IOException
Записывает 32-битное значение int.
Определено в:
writeInt в интерфейсе DataOutput
Параметры:
val — записываемое целочисленное значение
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeLong

public void writeLong(long val) throws IOException
Записывает 64-битное значение long.
Определено в:
writeLong в интерфейсе DataOutput
Параметры:
val — записываемое значение long
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeFloat

public void writeFloat(float val) throws IOException
Записывает 32-битное значение float.
Определено в:
writeFloat в интерфейсе DataOutput
Параметры:
val — записываемое значение float
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeDouble

public void writeDouble(double val) throws IOException
Записывает 64-битное значение double.
Определено в:
writeDouble в интерфейсе DataOutput
Параметры:
val — записываемое значение double
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeBytes

public void writeBytes(String str) throws IOException
Записывает строку как последовательность байтов.
Определено в:
writeBytes в интерфейсе DataOutput
Параметры:
str — строка байтов для записи
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeChars

public void writeChars(String str) throws IOException
Записывает строку как последовательность символов.
Определено в:
writeChars в интерфейсе DataOutput
Параметры:
str — строка символов для записи
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

writeUTF

public void writeUTF(String str) throws IOException
Записывает примитивные данные этой строки в формате модифицированного UTF-8. Обратите внимание: запись строки в поток как примитивных данных существенно отличается от записи ее как объекта. Экземпляр String, записанный методом writeObject, изначально записывается в поток как строка. При последующих вызовах writeObject() в поток записываются ссылки на эту строку.
Определено в:
writeUTF в интерфейсе DataOutput
Параметры:
str — записываемая строка
Исключения:
IOException — если при записи в базовый поток произошла ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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