Spec-Zone.ru › OpenJDK 21

Класс 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.

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

Например, для записи объекта, который можно прочитать с помощью примера в 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
     }

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

    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. Объекты отвечают за обработку любой версии, которая происходит.

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

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

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

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

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

Modifier and Type Class Description
static class  ObjectOutputStream.PutField
Предоставляет программный доступ к постоянным полям, которые нужно записать в ObjectOutput.

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

Поля, объявленные в интерфейсе java.io.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

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

ObjectOutputStream()
ObjectOutputStream(OutputStream out)
Modifier Constructor Description
protected
Предоставляет способ для подклассов, полностью переопределяющих ObjectOutputStream, не выделять частные данные, используемые только этой реализацией ObjectOutputStream.
Создаёт ObjectOutputStream, который записывает данные в указанный OutputStream.

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

Modifier and Type Method Description
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)
Записывает булево значение.
void writeByte(int val)
Записывает 8-битовый байт.
void writeBytes(String str)
Записывает строку как последовательность байтов.
void writeChar(int val)
Записывает 16-битный символ.
void writeChars(String str)
Записывает строку как последовательность символов.
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.

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

nullOutputStream

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

ObjectOutputStream

public ObjectOutputStream(OutputStream out) throws IOException
Создаёт ObjectOutputStream, который записывает данные в указанный OutputStream. Этот конструктор записывает заголовок потока сериализации в базовый поток; вызывающие методы могут захотеть сразу сбросить поток, чтобы гарантировать, что конструкторы для получения ObjectInputStream не заблокируются при чтении заголовка.

Если установлен менеджер безопасности, этот конструктор проверит разрешение SerializablePermission «enableSubclassImplementation» при вызове непосредственно или косвенно конструктором подкласса, который переопределяет методы ObjectOutputStream.putFields или ObjectOutputStream.writeUnshared.

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

ObjectOutputStream

protected ObjectOutputStream() throws IOException, SecurityException
Обеспечивает способ для подклассов, которые полностью переопределяют ObjectOutputStream, чтобы не приходилось выделять частные данные, используемые только этим реализацией ObjectOutputStream.

Если установлен менеджер безопасности, этот метод сначала вызывает метод менеджера безопасности checkPermission с разрешением SerializablePermission("enableSubclassImplementation") для проверки возможности разрешения подклассов.

Исключения:
SecurityException - если менеджер безопасности существует и его метод checkPermission запрещает разрешение подклассов.
IOException - если при создании потока произошла ошибка ввода-вывода
См. также:
  • SecurityManager.checkPermission(java.security.Permission)
  • SerializablePermission

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

useProtocolVersion

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

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

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

Параметры:
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
Метод, используемый подклассами для переопределения метода default writeObject. Этот метод вызывается надёжными подклассами ObjectOutputStream, которые создали ObjectOutputStream с помощью защищенного конструктора без аргументов. От подкласса ожидается, что он предоставит переопределяющий метод с модификатором «final».
Параметры:
obj - объект, подлежащий записи в базовый поток
Исключения:
IOException - если при записи в базовый поток произошли ошибки ввода-вывода
С тех пор:
1.2
См. также:
  • ObjectOutputStream()
  • writeObject(Object)

writeUnshared

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

Подклассы ObjectOutputStream, которые переопределяют этот метод, могут быть созданы только в контекстах безопасности, обладающих разрешением «enableSubclassImplementation» SerializablePermission; любая попытка создания такого подкласса без этого разрешения приведёт к выбросу SecurityException.

Параметры:
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.

Parameters:
cl - прокси-класс для аннотации пользовательских данных
Throws:
IOException - любое исключение, сгенерированное базовым OutputStream
Since:
1.3
See Also:
  • ObjectInputStream.resolveProxyClass(String[])

replaceObject

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

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

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

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

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

Parameters:
obj - объект, который нужно заменить
Returns:
альтернативный объект, заменивший указанный
Throws:
IOException - Любое исключение, сгенерированное базовым потоком OutputStream.

enableReplaceObject

protected boolean enableReplaceObject(boolean enable) throws SecurityException
Включает возможность потоку заменять объекты, записанные в поток. При включении, метод replaceObject(java.lang.Object) вызывается для каждого сериализуемого объекта.

Если замена объектов в данный момент отключена, а enable равно true, и установлен менеджер безопасности, этот метод сначала вызывает метод менеджера безопасности checkPermission с разрешением SerializablePermission("enableSubstitution"), чтобы убедиться, что у вызывающего есть разрешение на включение возможности замены объектов, записываемых в поток.

Parameters:
enable - true для включения использования replaceObject для каждого сериализуемого объекта
Returns:
предыдущее значение перед вызовом этого метода
Throws:
SecurityException - если менеджер безопасности существует и его метод checkPermission запрещает включение возможности замены объектов, записываемых в поток.
See Also:
  • SecurityManager.checkPermission(java.security.Permission)
  • SerializablePermission

writeStreamHeader

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

writeClassDescriptor

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

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

Parameters:
desc - описатель класса, который нужно записать в поток
Throws:
IOException - если произошла ошибка ввода-вывода.
Since:
1.3
External Specifications
  • Спецификация сериализации Java-объектов
See Also:
  • ObjectInputStream.readClassDescriptor()
  • useProtocolVersion(int)
  • ObjectStreamConstants.PROTOCOL_VERSION_1

write

public void write(int val) throws IOException
Записывает байт. Этот метод будет ожидать, пока байт не будет записан.
Specified by:
write в интерфейсе DataOutput
Specified by:
write в интерфейсе ObjectOutput
Specified by:
write в классе OutputStream
Parameters:
val - байт, который нужно записать в поток
Throws:
IOException - если произошла ошибка ввода-вывода.

write

public void write(byte[] buf) throws IOException
Записывает массив байтов. Этот метод будет ожидать, пока байты не будут записаны.
Specified by:
write в интерфейсе DataOutput
Specified by:
write в интерфейсе ObjectOutput
Overrides:
write в классе OutputStream
Parameters:
buf - данные для записи
Throws:
IOException - если произошла ошибка ввода-вывода.
See Also:
  • OutputStream.write(byte[], int, int)

write

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

flush

public void flush() throws IOException
Очищает поток. Это запишет все буферизованные данные вывода и очистит базовый поток.
Specified by:
flush в интерфейсе Flushable
Specified by:
flush в интерфейсе ObjectOutput
Overrides:
flush в классе OutputStream
Throws:
IOException - если произошла ошибка ввода-вывода.

drain

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

close

public void close() throws IOException
Закрывает поток. Этот метод необходимо вызывать для освобождения всех ресурсов, связанных с потоком.
Specified by:
close в интерфейсе AutoCloseable
Specified by:
close в интерфейсе Closeable
Specified by:
close в интерфейсе ObjectOutput
Overrides:
close в классе OutputStream
Throws:
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-битное короткое целое.
Указано в:
writeShort в интерфейсе DataOutput
Параметры:
val - значение короткого целого для записи
Исключения:
IOException - если при записи в базовый поток возникли ошибки ввода-вывода

writeChar

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

writeInt

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

writeLong

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

writeFloat

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

writeDouble

public void writeDouble(double val) throws IOException
Записывает 64-битное число с плавающей точкой двойной точности.
Указано в:
writeDouble в интерфейсе DataOutput
Параметры:
val - значение числа с плавающей точкой двойной точности для записи
Исключения:
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 - если при записи в базовый поток возникли ошибки ввода-вывода

© 1993, 2023, 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/21/docs/api/java.base/java/io/ObjectOutputStream.html

Spec-Zone.ru

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