Класс 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.
Подклассы 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.