Spec-Zone.ru › OpenJDK 8

Класс ObjectInputStream

  • java.lang.Object
    • java.io.InputStream
      • java.io.ObjectInputStream
Все реализованные интерфейсы:
Closeable, DataInput, ObjectInput, ObjectStreamConstants, AutoCloseable

public class ObjectInputStream
extends InputStream
implements ObjectInput, ObjectStreamConstants

Класс ObjectInputStream десериализует примитивные данные и объекты, ранее записанные с помощью ObjectOutputStream.

ObjectOutputStream и ObjectInputStream могут предоставить приложению средства для сохранения графов объектов в долговременном хранилище при использовании соответственно FileOutputStream и FileInputStream. ObjectInputStream используется для восстановления этих ранее сериализованных объектов. Другие применения включают передачу объектов между хостами с использованием потока сокетов или для маршалинга и унмаршалинга аргументов и параметров в системе удалённого взаимодействия.

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

Из потоков можно читать только объекты, поддерживающие интерфейсы java.io.Serializable или java.io.Externalizable.

Метод readObject используется для чтения объекта из потока. Для получения желаемого типа необходимо использовать безопасное приведение типов Java. В Java строки и массивы являются объектами и обрабатываются как объекты во время сериализации. При чтении их необходимо привести к ожидаемому типу.

Примитивные типы данных могут быть прочитаны из потока с помощью соответствующего метода интерфейса DataInput.

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

Чтение объекта аналогично запуску конструкторов нового объекта. Память выделяется для объекта и инициализируется нулями (NULL). Для несериализуемых классов вызываются конструкторы без аргументов, а затем поля сериализуемых классов восстанавливаются из потока, начиная с сериализуемого класса, наиболее близкого к java.lang.object, и заканчивая наиболее специфичным классом объекта.

Например, для чтения из потока, как в примере ObjectOutputStream:

FileInputStream fis = new FileInputStream("t.tmp");
      ObjectInputStream ois = new ObjectInputStream(fis);

      int i = ois.readInt();
      String today = (String) ois.readObject();
      Date date = (Date) ois.readObject();

      ois.close();

Классы контролируют способ своей сериализации, реализуя интерфейсы java.io.Serializable или java.io.Externalizable.

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

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

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

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

Любая попытка прочитать данные объекта, которые превышают границы пользовательских данных, записанных соответствующим методом writeObject, приведёт к выбрасыванию OptionalDataException со значением eof, равным true. Необъектные чтения, которые превышают конец выделенных данных, отражают конец данных таким же образом, как они бы указали на конец потока: байтовые чтения вернут -1 как прочитанный байт или количество прочитанных байтов, а примитивные чтения выбросят EOFExceptions. Если нет соответствующего метода writeObject, то конец данных по умолчанию отмечает конец выделенных данных.

Примитивные и объектные вызовы чтения, выполняемые внутри метода readExternal, ведут себя аналогично — если поток уже находится в конце данных, записанных соответствующим методом writeExternal, чтения объектов выбросят OptionalDataExceptions со значением eof, равным true, байтовые чтения вернут -1, а примитивные чтения выбросят EOFExceptions. Обратите внимание, что такое поведение не распространяется на потоки, записанные с устаревшим ObjectStreamConstants.PROTOCOL_VERSION_1 протоколом, в котором конец данных, записанных методами writeExternal, не отмечается и, следовательно, не может быть обнаружен.

Метод readObjectNoData отвечает за инициализацию состояния объекта для его конкретного класса в случае, если поток сериализации не указывает данный класс как суперкласс десериализуемого объекта. Это может произойти в случаях, когда принимающая сторона использует другую версию класса экземпляра, десериализованного, чем отправляющая сторона, и версия получателя расширяет классы, которые не расширяются версией отправителя. Это также может произойти, если поток сериализации был изменён; таким образом, readObjectNoData полезен для правильной инициализации десериализованных объектов несмотря на «враждебный» или неполный исходный поток.

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

Любое исключение, возникающее во время десериализации объекта, будет перехвачено ObjectInputStream и прервёт процесс чтения.

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

Постоянные значения перечислений десериализуются иначе, чем обычные сериализуемые или экстернализуемые объекты. Сериализованная форма постоянного значения перечисления состоит только из его имени; значения полей постоянного значения не передаются. Для десериализации постоянного значения перечисления ObjectInputStream читает имя постоянного значения из потока; десериализованное постоянное значение затем получается путём вызова статического метода Enum.valueOf(Class, String) со базовым типом перечисления и полученным именем постоянного значения как аргументами. Как и другие сериализуемые или экстернализуемые объекты, постоянные значения перечислений могут выступать в качестве целей обратных ссылок, появляющихся в потоке сериализации. Процесс десериализации постоянных значений перечислений не может быть настроен: любые методы readObject, readObjectNoData и readResolve, специфичные для класса, определённые типами перечислений, игнорируются во время десериализации. Аналогично, любые объявления полей serialPersistentFields или serialVersionUID также игнорируются — все типы перечислений имеют фиксированное значение serialVersionUID 0L.

С:
JDK1.1
См. также:
DataInput, ObjectOutputStream, Serializable, Спецификация сериализации объектов, раздел 3, Классы ввода объектов

Вложенные классы

Модификатор и тип Класс и описание
static class  ObjectInputStream.GetField

Предоставляет доступ к сохраняемым полям, считанным из потока ввода.

Поля

Поля, унаследованные от интерфейса java.io.ObjectStreamConstants

baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, 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

Конструкторы

Модификатор Конструктор и описание
protected ObjectInputStream()

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

ObjectInputStream(InputStream in)

Создаёт ObjectInputStream, который читает из указанного InputStream.

Методы

Модификатор и тип Метод и описание
int available()

Возвращает количество байтов, которые можно прочитать без блокировки.

void close()

Закрывает поток ввода.

void defaultReadObject()

Читает нестатические и нетранзиентные поля текущего класса из этого потока.

protected boolean enableResolveObject(boolean enable)

Разрешает потоку заменять объекты, считанные из потока.

int read()

Читает байт данных.

int read(byte[] buf, int off, int len)

Читает в массив байтов.

boolean readBoolean()

Читает булево значение.

byte readByte()

Читает байт размером 8 бит.

char readChar()

Читает символ размером 16 бит.

protected ObjectStreamClass readClassDescriptor()

Читает описание класса из потока сериализации.

double readDouble()

Читает число с плавающей точкой двойной точности (64 бита).

ObjectInputStream.GetField readFields()

Читает постоянные поля из потока и делает их доступными по имени.

float readFloat()

Читает число с плавающей точкой одинарной точности (32 бита).

void readFully(byte[] buf)

Читает байты, блокируя, пока все байты не будут прочитаны.

void readFully(byte[] buf, int off, int len)

Читает байты, блокируя, пока все байты не будут прочитаны.

int readInt()

Читает целое число размером 32 бита.

String readLine()

Устаревший.

Этот метод не преобразует байты в символы должным образом. См. DataInputStream для подробностей и альтернатив.

long readLong()

Читает целое число размером 64 бита.

Object readObject()

Читает объект из ObjectInputStream.

protected Object readObjectOverride()

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

short readShort()

Читает целое число размером 16 бит.

protected void readStreamHeader()

Метод readStreamHeader предназначен для того, чтобы подклассы могли читать и проверять собственные заголовки потоков.

Object readUnshared()

Читает «необщий» объект из ObjectInputStream.

int readUnsignedByte()

Читает беззнаковый байт размером 8 бит.

int readUnsignedShort()

Читает беззнаковый короткий целое число размером 16 бит.

String readUTF()

Читает строку в формате измененного UTF-8.

void registerValidation(ObjectInputValidation obj, int prio)

Регистрирует объект для проверки перед возвратом графа.

protected Class<?> resolveClass(ObjectStreamClass desc)

Загружает локальный эквивалент класса указанного описания класса потока.

protected Object resolveObject(Object obj)

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

protected Class<?> resolveProxyClass(String[] interfaces)

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

int skipBytes(int len)

Пропускает байты.

Методы, унаследованные от класса java.io.InputStream

mark, markSupported, read, reset, skip

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

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

Методы, унаследованные от интерфейса java.io.ObjectInput

read, skip

Конструкторы

ObjectInputStream

public ObjectInputStream(InputStream in)
                  throws IOException

Создаёт ObjectInputStream, который считывает данные из указанного потока InputStream. Заголовок потока сериализации считывается и проверяется. Этот конструктор будет заблокирован до тех пор, пока соответствующий ObjectOutputStream не запишет и не сбросит заголовок.

Если установлен менеджер безопасности, этот конструктор проверит наличие разрешения SerializablePermission "enableSubclassImplementation", когда он вызывается непосредственно или косвенно конструктором подкласса, который переопределяет методы ObjectInputStream.readFields или ObjectInputStream.readUnshared.

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

ObjectInputStream

protected ObjectInputStream()
                     throws IOException,
                            SecurityException

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

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

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

Методы

readObject

public final Object readObject()
                        throws IOException,
                               ClassNotFoundException

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

Корневой объект полностью восстанавливается, когда все его поля и объекты, на которые он ссылается, полностью восстановлены. На этом этапе вызываются обратные вызовы валидации объекта в порядке, основанном на их зарегистрированных приоритетах. Обратные вызовы регистрируются объектами (в специальных методах readObject) по мере их индивидуального восстановления.

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

Определено в:
readObject в интерфейсе ObjectInput
Возвращает:
объект, прочитанный из потока
Исключения:
ClassNotFoundException - Класс сериализованного объекта не найден.
InvalidClassException - Что-то не так с классом, используемым сериализацией.
StreamCorruptedException - Информация управления в потоке несогласована.
OptionalDataException - В потоке обнаружены примитивные данные вместо объектов.
IOException - Любые обычные исключения, связанные с вводом/выводом.

readObjectOverride

protected Object readObjectOverride()
                             throws IOException,
                                    ClassNotFoundException

Этот метод вызывается надёжными подклассами ObjectOutputStream, которые создали ObjectOutputStream, используя защищённый конструктор без аргументов. От подкласса ожидается переопределение метода с модификатором "final".

Возвращает:
объект, прочитанный из потока.
Исключения:
ClassNotFoundException - Определение класса сериализованного объекта не найдено.
OptionalDataException - В потоке обнаружены примитивные данные вместо объектов.
IOException - если произошли ошибки ввода-вывода при чтении из базового потока
С тех пор:
1.2
См. также:
ObjectInputStream(), readObject()

readUnshared

public Object readUnshared()
                    throws IOException,
                           ClassNotFoundException

Читает "необщий" объект из ObjectInputStream. Этот метод идентичен readObject, за исключением того, что он предотвращает последующие вызовы readObject и readUnshared от возврата дополнительных ссылок на десериализованный экземпляр, полученный через этот вызов. В частности:

  • Если readUnshared вызван для десериализации обратной ссылки (представления потока объекта, который был записан ранее в поток), будет выброшено исключение ObjectStreamException.
  • Если readUnshared возвращается успешно, то любые последующие попытки десериализовать обратные ссылки на обработчик потока, десериализованный readUnshared, вызовут ObjectStreamException.
Десериализация объекта через readUnshared делает недоступной обработку потока, связанную с возвращаемым объектом. Обратите внимание, что это само по себе не всегда гарантирует, что ссылка, возвращенная readUnshared, уникальна; десериализованный объект может определить метод readResolve, который возвращает видимый для других сторон объект, или readUnshared может вернуть объект Class или константу перечисления, доступную в другом месте потока или из внешних источников. Если десериализованный объект определяет метод readResolve, и вызов этого метода возвращает массив, то readUnshared возвращает поверхностную копию этого массива; это гарантирует, что возвращаемый объект массива уникален и не может быть получен второй раз из вызова readObject или readUnshared в ObjectInputStream, даже если базовый поток данных был изменён.

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

Возвращает:
ссылка на десериализованный объект
Исключения:
ClassNotFoundException - если класс объекта для десериализации не найден
StreamCorruptedException - если информация управления в потоке несогласована
ObjectStreamException - если объект для десериализации уже появился в потоке
OptionalDataException - если примитивные данные находятся в потоке
IOException - если при десериализации произошла ошибка ввода-вывода
С тех пор:
1.4

defaultReadObject

public void defaultReadObject()
                       throws IOException,
                              ClassNotFoundException

Считывает нестатические и нетранзиентные поля текущего класса из этого потока. Этот метод может вызываться только из метода readObject класса, который десериализуется. Он выбросит NotActiveException, если будет вызван иначе.

Исключения:
ClassNotFoundException - если класс сериализованного объекта не найден.
IOException - если произошла ошибка ввода-вывода.
NotActiveException - если поток не читает объекты в данный момент.

readFields

public ObjectInputStream.GetField readFields()
                                      throws IOException,
                                             ClassNotFoundException

Считывает постоянные поля из потока и делает их доступными по имени.

Возвращает:
объект GetField, представляющий постоянные поля десериализуемого объекта
Исключения:
ClassNotFoundException - если класс сериализованного объекта не найден.
IOException - если произошла ошибка ввода-вывода.
NotActiveException - если поток не читает объекты в данный момент.
С тех пор:
1.2

registerValidation

public void registerValidation(ObjectInputValidation obj,
                               int prio)
                        throws NotActiveException,
                               InvalidObjectException

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

Параметры:
obj - объект, который получит обратный вызов проверки.
prio - управляет порядком обратных вызовов; ноль является хорошим значением по умолчанию. Используйте большие числа для обратного вызова раньше, меньшие числа — позже. В пределах приоритета обратные вызовы обрабатываются в произвольном порядке.
Исключения:
NotActiveException - поток не читает объекты в данный момент, поэтому регистрация обратного вызова недопустима.
InvalidObjectException - объект проверки равен null.

resolveClass

protected Class<?> resolveClass(ObjectStreamClass desc)
                         throws IOException,
                                ClassNotFoundException

Загружает локальный эквивалент класса, указанного описанием класса потока. Подклассы могут реализовать этот метод, чтобы разрешить получение классов из альтернативного источника.

Соответствующий метод в ObjectOutputStream — annotateClass. Этот метод будет вызван только один раз для каждого уникального класса в потоке. Этот метод может быть реализован подклассами для использования альтернативного механизма загрузки, но должен вернуть объект Class. После возврата, если класс не является классом массива, его serialVersionUID сравнивается с serialVersionUID сериализованного класса, и если есть несоответствие, десериализация завершается ошибкой, и выбрасывается InvalidClassException.

Встроенная реализация этого метода в ObjectInputStream возвращает результат вызова

Class.forName(desc.getName(), false, loader)
где loader определяется следующим образом: если в стеке текущей нити есть метод, декларирующий класс, определенный пользовательским загрузчиком класса (и он не был сгенерирован для реализации рефлексивных вызовов), то loader — загрузчик класса, соответствующий ближайшему такому методу к текущей рамке; в противном случае, loader — null. Если этот вызов приводит к ClassNotFoundException, и имя переданного объекта ObjectStreamClass — ключевое слово языка Java для примитивного типа или void, то будет возвращен объект Class, представляющий этот примитивный тип или void (например, объект ObjectStreamClass, с именем "int", будет резольвирован к Integer.TYPE). В противном случае, будет выброшено исключение ClassNotFoundException в вызывающий метод.
Параметры:
desc - экземпляр класса ObjectStreamClass
Возвращает:
объект Class, соответствующий desc
Выбрасывает:
IOException - любые стандартные исключения ввода/вывода.
ClassNotFoundException - если класс сериализованного объекта не найден.

resolveProxyClass

protected Class<?> resolveProxyClass(String[] interfaces)
                              throws IOException,
                                     ClassNotFoundException

Возвращает класс-прокси, реализующий интерфейсы, указанные в описателе класса прокси; подклассы могут реализовать этот метод для чтения пользовательских данных из потока вместе с описателями для динамических классов прокси, позволяя использовать альтернативный механизм загрузки для интерфейсов и класса прокси.

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

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

По умолчанию этот метод в ObjectInputStream возвращает результат вызова Proxy.getProxyClass со списком Class объектов для интерфейсов, которые указаны в параметре interfaces. Объект Class для каждого имени интерфейса i — это значение, возвращаемое вызовом

Class.forName(i, false, loader)
где loader — это первого не-null загрузчика классов в стеке выполнения или null, если в стеке нет не-null загрузчиков классов (тот же выбор загрузчика классов, используемый методом resolveClass). Если ни один из разрешённых интерфейсов не является не-публичным, это же значение loader также передаётся в качестве загрузчика классов методу Proxy.getProxyClass; если присутствуют не-публичные интерфейсы, в качестве загрузчика передаётся загрузчик класса для них (если встречается более одного не-публичного загрузчика классов интерфейса, выбрасывается IllegalAccessError). Если Proxy.getProxyClass выбросит IllegalArgumentException, resolveProxyClass выбросит ClassNotFoundException, содержащий IllegalArgumentException.
Параметры:
interfaces - список имён интерфейсов, которые были десериализованы в описателе класса прокси
Возвращает:
класс прокси для указанных интерфейсов
Выбрасывает:
IOException - любое исключение, сгенерированное базовым InputStream
ClassNotFoundException - если класс прокси или любой из указанных интерфейсов не найден
С:
1.3
См. также:
ObjectOutputStream.annotateProxyClass(Class)

resolveObject

protected Object resolveObject(Object obj)
                        throws IOException

Этот метод позволит надёжным подклассам ObjectInputStream подставлять один объект вместо другого во время десериализации. Замена объектов отключена, пока не будет вызван enableResolveObject. Метод enableResolveObject проверяет, что поток, запрашивающий разрешение на замену объекта, надёжен. Каждый ссылка на сериализуемые объекты передаётся в resolveObject. Чтобы гарантировать, что внутреннее состояние объектов не будет непреднамеренно раскрыто, только надёжные потоки могут использовать resolveObject.

Этот метод вызывается после чтения объекта, но до его возвращения из readObject. По умолчанию resolveObject просто возвращает тот же объект.

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

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

Параметры:
obj - подлежащий замене объект
Возвращает:
заменённый объект
Выбрасывает:
IOException - Любые стандартные исключения ввода/вывода.

enableResolveObject

protected boolean enableResolveObject(boolean enable)
                               throws SecurityException

Включает поток, чтобы позволить заменять объекты, считываемые из потока. При включении, метод resolveObject вызывается для каждого десериализуемого объекта.

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

Параметры:
enable - true для включения использования resolveObject для каждого десериализуемого объекта
Возвращает:
предыдущее значение до вызова этого метода
Выбрасывает:
SecurityException - если менеджер безопасности существует и его метод checkPermission запрещает включение потока для замены объектов, считываемых из потока.
См. также:
SecurityManager.checkPermission(java.security.Permission), SerializablePermission

readStreamHeader

protected void readStreamHeader()
                         throws IOException,
                                StreamCorruptedException

Метод readStreamHeader предназначен для возможности подклассам читать и проверять собственные заголовки потока. Он считывает и проверяет магическое число и номер версии.

Выбрасывает:
IOException - если при чтении из базового InputStream произошли ошибки ввода/вывода
StreamCorruptedException - если управляющая информация в потоке несоответствует

readClassDescriptor

protected ObjectStreamClass readClassDescriptor()
                                         throws IOException,
                                                ClassNotFoundException

Читать описание класса из потока сериализации. Этот метод вызывается, когда ObjectInputStream ожидает описание класса как следующего элемента в потоке сериализации. Подклассы ObjectInputStream могут переопределить этот метод, чтобы прочитать описания классов, записанные в нестандартном формате (подклассами ObjectOutputStream, переопределившими метод writeClassDescriptor). По умолчанию этот метод читает описания классов в соответствии с форматом, определённым в спецификации сериализации объектов.

Возвращает:
прочитанное описание класса
Выбрасывает:
IOException - если произошла ошибка ввода/вывода.
ClassNotFoundException - если класс сериализованного объекта, использованного в представлении описания класса, не найден
С:
1.3
См. также:
ObjectOutputStream.writeClassDescriptor(java.io.ObjectStreamClass)

read

public int read()
         throws IOException

Считывает байт данных. Этот метод будет блокироваться, если вход недоступен.

Определено в:
read в интерфейсе ObjectInput
Определено в:
read в классе InputStream
Возвращает:
прочитанный байт или -1, если достигнут конец потока.
Выбрасывает:
IOException - если произошла ошибка ввода/вывода.

read

public int read(byte[] buf,
                int off,
                int len)
         throws IOException

Считывает в массив байтов. Этот метод будет блокироваться, пока не будет доступен ввод. Рассмотрите использование java.io.DataInputStream.readFully для чтения ровно 'length' байтов.

Определено в:
read в интерфейсе ObjectInput
Переопределяет:
read в классе InputStream
Параметры:
buf - буфер, в который считываются данные
off - начальный смещение данных
len - максимальное количество считываемых байтов
Возвращает:
фактическое количество считанных байтов, -1 возвращается при достижении конца потока.
Выбрасывает:
IOException - если произошла ошибка ввода/вывода.
См. также:
DataInputStream.readFully(byte[],int,int)

available

public int available()
              throws IOException

Возвращает количество байтов, которые могут быть считанны без блокировки.

Определено в:
available в интерфейсе ObjectInput
Переопределяет:
available в классе InputStream
Возвращает:
количество доступных байтов.
Выбрасывает:
IOException - если при чтении из базового InputStream произошли ошибки ввода/вывода

close

public void close()
           throws IOException

Закрывает входной поток. Необходимо вызвать, чтобы освободить все ресурсы, связанные с потоком.

Определено в:
close в интерфейсе Closeable
Определено в:
close в интерфейсе ObjectInput
Определено в:
close в интерфейсе AutoCloseable
Переопределяет:
close в классе InputStream
Выбрасывает:
IOException - если произошла ошибка ввода/вывода.

readBoolean

public boolean readBoolean()
                    throws IOException

Считывает булево значение.

Определено в:
readBoolean в интерфейсе DataInput
Возвращает:
считанное булево значение.
Выбрасывает:
EOFException - если достигнут конец файла.
IOException - если произошла другая ошибка ввода/вывода.

readByte

public byte readByte()
              throws IOException

Считывает 8-битный байт.

Определено в:
readByte в интерфейсе DataInput
Возвращает:
считанный 8-битный байт.
Выбрасывает:
EOFException - если достигнут конец файла.
IOException - если произошла другая ошибка ввода/вывода.

readUnsignedByte

public int readUnsignedByte()
                     throws IOException

Считывает беззнаковый 8-битный байт.

Определено в:
readUnsignedByte в интерфейсе DataInput
Возвращает:
считанный 8-битный байт.
Выбрасывает:
EOFException - если достигнут конец файла.
IOException - если произошла другая ошибка ввода/вывода.

readChar

public char readChar()
              throws IOException

Считывает 16-битный символ.

Определено в:
readChar в интерфейсе DataInput
Возвращает:
считанный 16-битный символ.
Выбрасывает:
EOFException - если достигнут конец файла.
IOException - если произошла другая ошибка ввода/вывода.

readShort

public short readShort()
                throws IOException

Считывает 16-битное целое число со знаком.

Указано в:
readShort в интерфейсе DataInput
Возвращает:
короткое целое 16 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readUnsignedShort

public int readUnsignedShort()
                      throws IOException

Считывает целое без знака 16 бит.

Указано в:
readUnsignedShort в интерфейсе DataInput
Возвращает:
короткое целое 16 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readInt

public int readInt()
            throws IOException

Считывает целое 32 бит.

Указано в:
readInt в интерфейсе DataInput
Возвращает:
целое 32 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readLong

public long readLong()
              throws IOException

Считывает целое 64 бит.

Указано в:
readLong в интерфейсе DataInput
Возвращает:
считанное целое 64 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readFloat

public float readFloat()
                throws IOException

Считывает число с плавающей точкой 32 бит.

Указано в:
readFloat в интерфейсе DataInput
Возвращает:
считанное число с плавающей точкой 32 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readDouble

public double readDouble()
                  throws IOException

Считывает число с плавающей точкой 64 бит.

Указано в:
readDouble в интерфейсе DataInput
Возвращает:
считанное число с плавающей точкой 64 бит.
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readFully

public void readFully(byte[] buf)
               throws IOException

Считывает байты, ожидая, пока все байты не будут прочитаны.

Указано в:
readFully в интерфейсе DataInput
Параметры:
buf - буфер, в который считываются данные
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

readFully

public void readFully(byte[] buf,
                      int off,
                      int len)
               throws IOException

Считывает байты, ожидая, пока все байты не будут прочитаны.

Указано в:
readFully в интерфейсе DataInput
Параметры:
buf - буфер, в который считываются данные
off - начальный смещение данных
len - максимальное количество считываемых байтов
Выбрасывает:
EOFException - Если достигнут конец файла.
IOException - Если произошла другая ошибка ввода-вывода.

skipBytes

public int skipBytes(int len)
              throws IOException

Пропускает байты.

Указано в:
skipBytes в интерфейсе DataInput
Параметры:
len - количество пропускаемых байтов
Возвращает:
фактическое количество пропущенных байтов.
Выбрасывает:
IOException - Если произошла ошибка ввода-вывода.

readLine

@Deprecated
public String readLine()
                            throws IOException

Устарело. Этот метод некорректно преобразует байты в символы. Обратитесь к классу DataInputStream для получения подробностей и альтернатив.

Считывает строку, завершенную символом \n, \r, \r\n или EOF.

Указано в:
readLine в интерфейсе DataInput
Возвращает:
строку-копию.
Выбрасывает:
IOException - если при чтении из базового InputStream возникли ошибки ввода-вывода.

readUTF

public String readUTF()
               throws IOException

Считывает строку в формате изменённый UTF-8.

Указано в:
readUTF в интерфейсе DataInput
Возвращает:
строку.
Выбрасывает:
IOException - если при чтении из базового InputStream возникли ошибки ввода-вывода
UTFDataFormatException - если прочитанные байты не представляют собой корректного кодирования строки в формате изменённый UTF-8

© 1993, 2020, 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