ObjectInputStream Класс

Определение

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

[Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)]
public class ObjectInputStream : Java.IO.InputStream, IDisposable, Java.Interop.IJavaPeerable, Java.IO.IObjectInput
[<Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)>]
type ObjectInputStream = class
    inherit InputStream
    interface IObjectInput
    interface IDataInput
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Наследование
ObjectInputStream
Атрибуты
Реализации

Комментарии

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

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

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

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

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

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

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

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

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

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.

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

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

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 в качестве прочитанного байта или количества прочитанных байтов, а примитивные операции чтения будут вызывать исключения EOFException. Если соответствующий метод writeObject отсутствует, конец сериализованных данных по умолчанию помечает конец выделенных данных.

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

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

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

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

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

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

Добавлено в JDK1.1.

Документация по Java для java.io.ObjectInputStream.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

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

ObjectInputStream()

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

ObjectInputStream(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

ObjectInputStream(Stream)

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

Свойства

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

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

(Унаследовано от Object)
JniPeerMembers

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

PeerReference

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

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Available()

Возвращает оценку количества байтов, которые могут быть прочитаны (или пропущены) из этого входного потока без блокировки, что может быть равно 0 или 0 при обнаружении конца потока.

(Унаследовано от InputStream)
Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Close()

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

(Унаследовано от InputStream)
DefaultReadObject()

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

Dispose()

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

(Унаследовано от Object)
Dispose(Boolean)

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

(Унаследовано от Object)
EnableResolveObject(Boolean)

Включите поток, чтобы разрешить замену объектов, считываемых из потока.

Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
JavaFinalize()

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

(Унаследовано от Object)
Mark(Int32)

Помечает текущую позицию в этом входном потоке.

(Унаследовано от InputStream)
MarkSupported()

Проверяет, поддерживает ли этот входной поток методы mark и reset .

(Унаследовано от InputStream)
Notify()

Пробуждение одного потока, ожидающего на мониторе этого объекта.

(Унаследовано от Object)
NotifyAll()

Активирует все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
Read()

Считывает байт данных.

Read(Byte[])

Считывает некоторое количество байтов из входного потока и сохраняет их в буферный массив b.

(Унаследовано от InputStream)
Read(Byte[], Int32, Int32)

Считывает до len байтов данных из входного потока в массив байтов.

(Унаследовано от InputStream)
ReadAllBytes()

Считывает все оставшиеся байты из входного потока.

(Унаследовано от InputStream)
ReadAsync()

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

(Унаследовано от InputStream)
ReadAsync(Byte[])

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

(Унаследовано от InputStream)
ReadAsync(Byte[], Int32, Int32)

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

(Унаследовано от InputStream)
ReadBoolean()

Считывает логическое значение.

ReadByte()

Считывает 8-разрядный байт.

ReadChar()

Считывает 16-разрядный символ char.

ReadClassDescriptor()

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

ReadDouble()

Считывает 64-разрядный двойник.

ReadFields()

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

ReadFloat()

Считывает 32-разрядное значение float.

ReadFully(Byte[])

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

ReadFully(Byte[], Int32, Int32)

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

ReadInt()

Считывает 32-разрядный int.

ReadLine()
Устаревшие..

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

ReadLong()

Считывает 64-разрядную длину.

ReadNBytes(Byte[], Int32, Int32)

Считывает запрошенное количество байтов из входного потока в заданный массив байтов.

(Унаследовано от InputStream)
ReadNBytes(Int32)

Считывает до указанного числа байтов из входного потока.

(Унаследовано от InputStream)
ReadObject()

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

ReadObjectOverride()

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

ReadShort()

Считывает 16-разрядную короткую строку.

ReadStreamHeader()

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

ReadUnshared()

Считывает объект unshared из ObjectInputStream.

ReadUnsignedByte()

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

ReadUnsignedShort()

Считывает неподписанный 16-разрядный короткий фрагмент.

ReadUTF()

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

RegisterValidation(IObjectInputValidation, Int32)

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

Reset()

Перемещает этот поток на позицию на момент mark последнего вызова метода в этом входном потоке.

(Унаследовано от InputStream)
ResolveClass(ObjectStreamClass)

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

ResolveObject(Object)

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

ResolveProxyClass(String[])

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

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
Skip(Int64)

Пропускает и удаляет байты n данных из этого входного потока.

(Унаследовано от InputStream)
SkipAsync(Int64)

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

(Унаследовано от InputStream)
SkipBytes(Int32)

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

SkipNBytes(Int64)

Пропускает и удаляет ровно n байты данных из этого входного потока.

(Унаследовано от InputStream)
ToArray<T>()

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

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
TransferTo(Stream)

Считывает все байты из этого входного потока и записывает байты в заданный поток вывода в порядке их чтения.

(Унаследовано от InputStream)
UnregisterFromRuntime()

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

(Унаследовано от Object)
Wait()

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.

(Унаследовано от Object)
Wait(Int64)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

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

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

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

(Унаследовано от Object)
IJavaPeerable.Finalized()

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

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

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

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

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

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

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

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

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

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенное средой выполнения Android.

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

ReadBooleanAsync(IDataInput)

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

ReadByteAsync(IDataInput)

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

ReadCharAsync(IDataInput)

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

ReadDoubleAsync(IDataInput)

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

ReadFloatAsync(IDataInput)

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

ReadFullyAsync(IDataInput, Byte[])

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

ReadFullyAsync(IDataInput, Byte[], Int32, Int32)

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

ReadIntAsync(IDataInput)

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

ReadLineAsync(IDataInput)

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

ReadLongAsync(IDataInput)

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

ReadShortAsync(IDataInput)

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

ReadUnsignedByteAsync(IDataInput)

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

ReadUnsignedShortAsync(IDataInput)

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

ReadUTFAsync(IDataInput)

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

SkipBytesAsync(IDataInput, Int32)

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

ReadAsync(IObjectInput)

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

ReadAsync(IObjectInput, Byte[])

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

ReadAsync(IObjectInput, Byte[], Int32, Int32)

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

ReadObjectAsync(IObjectInput)

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

SkipAsync(IObjectInput, Int64)

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

Применяется к