ObjectInputStream Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream.
[Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)]
public class ObjectInputStream : Java.IO.InputStream, IDisposable, 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 десериализирует примитивные данные и объекты, ранее написанные с помощью 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.
Реализация интерфейса 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 с значением true, байтовые операции чтения возвращают -1, а примитивные операции чтения вызывают EOFExceptions. Обратите внимание, что это поведение не содержит потоков, записанных с помощью старого ObjectStreamConstants.PROTOCOL_VERSION_1 протокола, в котором конец данных, записанных методами writeExternal, не является размеченным и поэтому не может быть обнаружен.
Метод readObjectNoData отвечает за инициализацию состояния объекта для определенного класса в том случае, если поток сериализации не перечисляет заданный класс в качестве суперкласса десериализуемого объекта. Это может произойти в случаях, когда получатель использует другую версию класса десериализированного экземпляра, чем отправляющая сторона, а версия получателя расширяет классы, которые не расширяются версией отправителя. Это также может произойти, если поток сериализации был изменен; следовательно, readObjectNoData полезно для инициализации десериализированных объектов должным образом, несмотря на "враждебный" или неполный исходный поток.
Сериализация не считывает или не присваивает значения полям любого объекта, который не реализует интерфейс java.io.Serializable. Подклассы объектов, которые не являются сериализуемыми, могут быть сериализуемыми. В этом случае несериализированный класс должен иметь конструктор no-arg, чтобы разрешить инициализацию полей. В этом случае подкласс несет ответственность за сохранение и восстановление состояния несериализируемого класса. Зачастую поля этого класса доступны (общедоступные, пакеты или защищенные) или доступны методы получения и задания, которые можно использовать для восстановления состояния.
Любое исключение, возникающее при десериализации объекта, будет поймано объектом ObjectInputStream и прервать процесс чтения.
Реализация интерфейса Externalizable позволяет объекту полностью контролировать содержимое и формат сериализованной формы объекта. Методы интерфейса Externalizable, writeExternal и readExternal, вызываются для сохранения и восстановления состояния объектов. При реализации класса они могут записывать и считывать собственное состояние с помощью всех методов ObjectOutput и ObjectInput. Это ответственность за объекты для обработки любых версий, которые возникают.
Константы перечисления десериализируются по-разному, чем обычные сериализуемые или внешние объекты. Сериализованная форма константы перечисления состоит исключительно из его имени; значения полей константы не передаются. Для десериализации константы перечисления ObjectInputStream считывает имя константы из потока; Десериализированная константа затем получается путем вызова статического метода Enum.valueOf(Class, String) с базовым типом константы перечисления и полученного имени константы в качестве аргументов. Как и другие сериализуемые или внешние объекты, константы перечисления могут функционировать в качестве целевых объектов обратной ссылки, которые появляются впоследствии в потоке сериализации. Процесс десериализации констант перечисления не может быть настроен: во время десериализации не учитываются методы readObjectNoData, readObjectNoData и readResolve, определенные типами перечисления. Аналогичным образом все объявления полей serialPersistentFields или serialVersionUID также игнорируются. Все типы перечисления имеют фиксированный serialVersionUID 0L.
Добавлено в JDK1.1.
Java документации по java.io.ObjectInputStream.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| ObjectInputStream() |
Предоставьте способ для подклассов, которые полностью повторно используют ObjectInputStream, не нужно выделять частные данные, только что используемые этой реализацией ObjectInputStream. |
| ObjectInputStream(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
| ObjectInputStream(Stream) |
Создает объект ObjectInputStream, который считывается из указанного объекта InputStream. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| JniPeerMembers |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Available() |
Возвращает оценку количества байтов, которые можно считывать (или пропускать) из этого входного потока без блокировки, что может быть равно 0 или 0 при обнаружении конца потока. (Унаследовано от InputStream) |
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Close() |
Закрывает этот входной поток и освобождает все системные ресурсы, связанные с потоком. (Унаследовано от InputStream) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| DefaultReadObject() |
Чтение нестатических и временных полей текущего класса из этого потока. |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| EnableResolveObject(Boolean) |
Включите поток, чтобы разрешить заменяемым объектам из потока. |
| Equals(Object) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Mark(Int32) |
Помечает текущую позицию в этом входном потоке. (Унаследовано от InputStream) |
| MarkSupported() |
Проверяет, поддерживает |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| Read() |
Считывает байт данных. |
| Read(Byte[], Int32, Int32) |
Считывает до |
| Read(Byte[]) |
Считывает некоторое количество байтов из входного потока и сохраняет их в буферный массив |
| ReadAllBytes() |
Считывает все оставшиеся байты из входного потока. (Унаследовано от InputStream) |
| ReadAsync() |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от InputStream) |
| ReadAsync(Byte[], Int32, Int32) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от InputStream) |
| ReadAsync(Byte[]) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от InputStream) |
| ReadBoolean() |
Считывает в логическое значение. |
| ReadByte() |
Считывает 8-разрядный байт. |
| ReadChar() |
Считывает 16-разрядную символьную символу. |
| ReadClassDescriptor() |
Чтение дескриптора класса из потока сериализации. |
| ReadDouble() |
Считывает 64-разрядный двойник. |
| ReadFields() |
Считывает постоянные поля из потока и делает их доступными по имени. |
| ReadFloat() |
Считывает 32-разрядную плавающую строку. |
| ReadFully(Byte[], Int32, Int32) |
Считывает байты, блокируя до тех пор, пока не будут прочитаны все байты. |
| ReadFully(Byte[]) |
Считывает байты, блокируя до тех пор, пока не будут прочитаны все байты. |
| ReadInt() |
Считывает 32-разрядную int. |
| ReadLine() |
Устаревшие.
Считывает строку, завершающуюся \n, \r, \r\n или EOF. |
| ReadLong() |
Считывает 64-разрядную длину. |
| ReadNBytes(Byte[], Int32, Int32) |
Считывает запрошенное число байтов из входного потока в заданный массив байтов. (Унаследовано от InputStream) |
| ReadNBytes(Int32) |
Считывает до указанного количества байтов из входного потока. (Унаследовано от InputStream) |
| ReadObject() |
Чтение объекта из ObjectInputStream. |
| ReadObjectOverride() |
Этот метод вызывается доверенными подклассами ОбъектаOutputStream, создающими ObjectOutputStream с помощью защищенного конструктора no-arg. |
| ReadShort() |
Считывает 16-разрядную короткую. |
| ReadStreamHeader() |
Предоставляется метод readStreamHeader, позволяющий подклассам считывать и проверять собственные заголовки потоков. |
| ReadUnshared() |
Считывает объект unshared из ObjectInputStream. |
| ReadUnsignedByte() |
Считывает 8-разрядный байт без знака. |
| ReadUnsignedShort() |
Считывает неназначенные 16-разрядные короткие. |
| ReadUTF() |
Считывает строку в измененном формате UTF-8. |
| RegisterValidation(IObjectInputValidation, Int32) |
Зарегистрируйте объект для проверки перед возвратом графа. |
| Reset() |
Переместит этот поток на позицию в момент |
| ResolveClass(ObjectStreamClass) |
Загрузите локальный класс, эквивалентный указанному описанию класса потока. |
| ResolveObject(Object) |
Этот метод позволит доверенным подклассам ObjectInputStream заменить один объект другим во время десериализации. |
| ResolveProxyClass(String[]) |
Возвращает прокси-класс, реализующий интерфейсы, именованные в дескрипторе класса прокси; Подклассы могут реализовать этот метод для чтения пользовательских данных из потока вместе с дескрипторами для динамических прокси-классов, что позволяет им использовать альтернативный механизм загрузки интерфейсов и прокси-класса. |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| Skip(Int64) |
Пропускает |
| SkipAsync(Int64) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от InputStream) |
| SkipBytes(Int32) |
Пропускает байты. |
| SkipNBytes(Int64) |
Пропускает и удаляет точно |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| TransferTo(Stream) |
Считывает все байты из этого входного потока и записывает байты в заданный выходной поток в том порядке, в который они считываются. (Унаследовано от InputStream) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.Finalized() |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. (Унаследовано от JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadAsync(IObjectInput, Byte[], Int32, Int32) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadAsync(IObjectInput, Byte[]) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadAsync(IObjectInput) |
Объект 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[], Int32, Int32) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadFullyAsync(IDataInput, Byte[]) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadIntAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadLineAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadLongAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadObjectAsync(IObjectInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadShortAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadUnsignedByteAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadUnsignedShortAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| ReadUTFAsync(IDataInput) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| SkipAsync(IObjectInput, Int64) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| SkipBytesAsync(IDataInput, Int32) |
Объект ObjectInputStream десериализирует примитивные данные и объекты, ранее написанные с помощью ObjectOutputStream. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |