Перейти к содержимому

Что делает метод reset в классе objectoutputstream

  • автор:

Object Input Stream Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

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

[Android.Runtime.Register("java/io/ObjectInputStream", DoNotGenerateAcw=true)] public class ObjectInputStream : Java.IO.InputStream, IDisposable, Java.Interop.IJavaPeerable, Java.IO.IObjectInput
[] 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:

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.

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

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

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

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

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

Свойства

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

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

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

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

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

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

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

Методы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Является устаревшей.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Object Output Stream Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

[Android.Runtime.Register("java/io/ObjectOutputStream", DoNotGenerateAcw=true)] public class ObjectOutputStream : Java.IO.OutputStream, IDisposable, Java.Interop.IJavaPeerable, Java.IO.IObjectOutput
[] type ObjectOutputStream = class inherit OutputStream interface IObjectOutput interface IDataOutput interface IJavaObject interface IDisposable interface IJavaPeerable

Наследование
ObjectOutputStream
Реализации

Комментарии

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream. Объекты можно считывать (воссоздать) с помощью ObjectInputStream. Постоянное хранение объектов можно выполнить с помощью файла для потока. Если поток является потоком сетевых сокетов, объекты можно восстановить на другом узле или в другом процессе.

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

Метод writeObject используется для записи объекта в поток. Любой объект, включая strings и массивы, записывается с помощью writeObject. В поток можно записать несколько объектов или примитивов. Объекты должны считываться обратно из соответствующего objectInputstream с теми же типами и в том же порядке, что и они были записаны.

Примитивные типы данных также можно записать в поток с помощью соответствующих методов из DataOutput. Строки также можно записать с помощью метода writeUTF.

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

Например, чтобы написать объект, который может быть прочитан в примере в ObjectInputStream:

FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(12345); oos.writeObject("Today"); oos.writeObject(new Date()); oos.close(); 

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

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

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

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

Сериализацию объекта можно предотвратить путем реализации методов writeObject и readObject, которые вызывают исключение NotSerializableException. Исключение будет перехвачено ObjectOutputStream и прервет процесс сериализации.

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

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

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

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

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

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

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

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

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

Свойства

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

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

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

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

Методы

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

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

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

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

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

Удалите все буферизированные данные в ObjectOutputStream.

Включите для потока замену объектов в потоке.

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

Сбрасывает этот выходной поток и принудительно записывает все буферизированные выходные байты.

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

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

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

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

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

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

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

Укажите версию протокола потока для использования при записи потока.

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

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

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

Записывает байты b.length из указанного массива байтов в этот выходной поток.

Записывает байты len из указанного массива байтов, начиная со смещения off в этот выходной поток.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

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

Записывает 8-разрядный байт.

Записывает строку в виде последовательности байтов.

Записывает 16-разрядную символь.

Записывает строку в виде последовательности символов char.

Запишите указанный дескриптор класса в ObjectOutputStream.

Записывает 64-разрядный двойник.

Запишите буферизированные поля в поток.

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

Записывает 32-разрядный int.

Записывает 64-разрядную длину.

Запишите указанный объект в ObjectOutputStream.

Метод, используемый подклассами для переопределения метода writeObject по умолчанию.

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

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

Записывает объект unshared в ObjectOutputStream.

Примитивная запись данных этой строки в измененном формате UTF-8.

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

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

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

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

ObjectOutputStream записывает примитивные типы данных и графы объектов Java в OutputStream.

Потоки вывода, OutputStream

Стандартная библиотека Java имеет весьма развитые средства вывода данных. Все возможности вывода данных сосредоточены в пакете java.io.

Существуют две параллельные иерархии классов вывода : OutputStream и Writer. Класс Writer введен в последних версиях Java.

В данной статье рассматривается вопрос использования потоков для вывода данных в файл. Иерархии выходных OutputStream потоков представлена на следующем рисунке.

Иерархия OutputStream

Поток Stream— это абстрактное значение источника или приёмника данных, которые способны обрабатывать информацию. Есть два типа потоков: байтовые и символьные. В некоторых ситуациях символьные потоки более эффективны, чем байтовые. Классы, производные от классов OutputStream или Writer, имеют методы с именами write() для записи одиночных байтов или массива байтов (отвечают за вывод данных).

Выходной поток OutputStream

Класс OutputStream — это абстрактный класс, определяющий байтовый поток вывода. Наследники данного класса определяют куда направлять данные: в массив байтов, в файл или канал. Из массива байт можно создать текстовую строку String.

Методы класса OutputStream :

  • void write(int b) записывает один байт в выходной поток. Аргумент этого метода имеет тип int, что позволяет вызывать write, передавая ему выражение, при этом не нужно выполнять приведение его типа к byte.
  • void write(byte b[]) записывает в выходной поток весь указанный массив байтов.
  • void write(byte b[], int off, int len) записывает в поток len байтов массива, начиная с элемента b[off].
  • void flush() очищает любые выходные буферы, завершая операцию вывода.
  • void close() закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException.

Класс ByteArrayOutputStream

Класс ByteArrayOutputStream представляет поток вывода, использующий массив байтов в качестве места вывода. Чтобы создать объект данного класса, можно использовать один из его конструкторов :

ByteArrayOutputStream() ByteArrayOutputStream(int size)

Первый конструктор создает массив данных для хранения байтов длиной в 32 байта, а второй конструктор создает массив длиной size.

Примеры использования класса ByteArrayOutputStream :

import java.io.ByteArrayOutputStream; public class TestBOS < public static void main(String[] args) < ByteArrayOutputStream bos; bos = new ByteArrayOutputStream(); String text = "Hello World!"; byte[] buffer = text.getBytes(); try< bos.write(buffer); >catch(Exception e) < System.out.println(e.getMessage()); >// Преобразование массива байтов в строку System.out.println(bos.toString()); // Вывод в консоль по символьно byte[] array = bos.toByteArray(); for (byte b: array) < System.out.print((char)b); >System.out.println(); > >

В классе ByteArrayOutputStream метод write записывает в поток некоторые данные (массив байтов). Этот массив байтов записывается в объекте ByteArrayOutputStream в защищенное поле buf, которое представляет также массив байтов (protected byte[] buf). Так как метод write может вызвать исключение, то вызов этого метода помещается в блок try..catch.

Используя методы toString() и toByteArray(), можно получить массив байтов buf в виде текста или непосредственно в виде массива байт.

С помощью метода writeTo можно перенаправить массив байт в другой поток. Данный метод в качестве параметра принимает объект OutputStream, в который производится запись массива байт :

Для ByteArrayOutputStream не надо явным образом закрывать поток с помощью метода close.

Класс FileOutputStream

Класс FileOutputStream создаёт объект класса OutputStream, который можно использовать для записи байтов в файл. Это основной класс для работы с файлами. Создание нового объекта не зависит от того, существует ли заданный файл или нет. Если файл отсутствует, то будет создан новый файл. В случае попытки открытия файла, доступного только для чтения, будет вызвано исключение.

FileOutputStream имеет следующий конструкторы:

public FileOutputStream(File file) throws FileNotFoundException; public FileOutputStream(String name) throws FileNotFoundException; public FileOutputStream(String name, boolean append) throws FileNotFoundException;

Смысл конструкторов последнего понятен из их описания. Но имеется несколько нюансов :

  • При открытии файла на запись, если файл не существует, то он будет создан.
  • Если файл существует, то он будет полностью обновлен. Т.е. если открыть и сразу закрыть файл, то содержимое файла будет уничтожено; реальный файл на диске станет нулевой длины.
  • Исключением для предыдущего правила является последний из конструкторов. Если третьему параметру append присвоить значение true, то можно будет дописывать в конец файла.

Какой-либо дополнительной функциональности по сравнению с базовым классом FileOutputStream не добавляет.

ByteArrayOutputStream bos = new ByteArrayOutputStream(); String text = «Hello Wolrd!»; byte[] buffer = text.getBytes(); try < bos.write(buffer); >catch(Exception e) < System.out.println(e.getMessage()); >try < FileOutputStream fos = new FileOutputStream("hello.txt"); bos.writeTo(fos); >catch(IOException e)

Класс BufferedOutputStream

Класс BufferedOutputStream создает буфер для потоков вывода. Этот буфер накапливает выводимые байты без постоянного обращения к устройству. И когда буфер заполнен, производится запись данных.

import java.io.*; . String text = «Hello world!»; // строка для записи FileOutputStream fos = new FileOutputStream(«file.txt»); try < BufferedOutputStream bos = new BufferedOutputStream(fos); // Переводим текст в байты byte[] buffer = text.getBytes(); bos.write(buffer, 0, buffer.length); >catch(IOException e)

Класс BufferedOutputStream в конструкторе принимает в качестве параметра объект OutputStream — в примере это файловый поток вывода FileOutputStream.

BufferedOutputStream не добавляет много новой функциональности, он просто оптимизирует действие потока выводаи его следует использовать для организации более эффективного буферизованного вывода в поток.

Класс DataOutputStream

Класс DataOutputStream позволяет писать данные в поток через интерфейс DataOutput, который определяет методы, преобразующие элементарные значения в форму последовательности байтов. Такие потоки облегчают сохранение в файле двоичных данных.

Для записи каждого из примитивных типов предназначен свой метод класса DataOutputStream:

  • writeByte(int value) — записывает в поток 1 байт
  • writeChar(int value) — записывает 2х-байтовое значение char
  • writeInt(int value) — записывает в поток целочисленное значение int
  • writeShort(int v) — записывает в поток значение short
  • writeFloat(float value) — записывает в поток 4-байтовое значение float
  • writeDouble(double value) — записывает в поток 8-байтовое значение double
  • writeBoolean(boolean value) — записывает в поток булевое однобайтовое значение
  • writeLong(long value) — записывает в поток значение long
  • writeUTF(String value) — записывает в поток строку в кодировке UTF-8

import java.io.*; . FileOutputStream fos = new FileOutputStream(«c://data.bin»); // запись в файл try (DataOutputStream dos = new DataOutputStream(fos)) < // записываем значения dos.writeUTF("Киса Воробьянинов"); dos.writeInt(30); dos.writeDouble(20.58); dos.writeBoolean(falss); System.out.println("Запись в файл выполнена"); >catch(IOException e)

Класс PrintStream

PrintStream является именно тем классом, который используется для вывода информации в консоль. Когда мы с помощью вызова System.out.println() пишем в консоль некоторую информацию, то тем самым используется PrintStream, так как переменная out класса System представляет объект класса PrintStream, а метод println() — это метод класса PrintStream.

Но PrintStream можно использовать для записи информации в поток вывода. Например, запишем информацию в файл:

import java.io.*; . String text = «Hello, World!»; // строка для записи FileOutputStream fos = new FileOutputStream(«C:/data.txt»); try < PrintStream printStream = new PrintStream(fos)); printStream.println(text); System.out.println("Запись в файл выполнена"); >catch(IOException e)

В данном примере используется конструктор PrintStream, который в качестве параметра принимает поток вывода FileOutputStream. Можно было бы также использовать конструктор с указанием названия файла для записи: PrintStream (String filename).

С помощью метода println() производится запись информации в выходной поток — то есть в объект FileOutputStream. В случае с выводом на консоль с помощью System.out.println() в качестве потока вывода выступает консоль.

Для вывода информации в выходной поток PrintStream использует следующие методы:

println(): вывод строковой информации с переводом строки print(): вывод строковой информации без перевода строки printf(): форматированный вывод

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

int i = 15; printStream.printf("Квадрат числа %d равен %d \n", i, i*i);

Класс ObjectOutputStream

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

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

Для записи данных ObjectOutputStream использует ряд методов, среди которых можно выделить следующие:

Метод Описание
void close() закрывает поток
void flush() сбрасывает содержимое буфера в выходной поток и очищает его
void write(byte[] buf) записывает в поток массив байтов
void write(int val) записывает в поток один младший байт из val
void writeBoolean(boolean val) записывает в поток значение boolean
void writeByte(int val) записывает в поток один младший байт из val
void writeChar(int val) записывает в поток значение типа char, представленное целочисленным значением
void writeDouble(double val) записывает в поток значение типа double
void writeFloat(float val) записывает в поток значение типа float
void writeInt(int val) записывает целочисленное значение
void writeLong(long val) записывает значение типа long
void writeShort(int val) записывает значение типа short
void writeUTF(String str) записывает в поток строку в кодировке UTF-8
void writeObject(Object obj) записывает в поток отдельный объект

Представленные методы охватывают весь спектр данных, которые можно сериализовать.

Пример использования класса ObjectOutputStream :

import java.io.*; class Person implements Serializable < private static final long serialVersionUID = 1L; public String name ; public int age ; public double height ; public boolean married; Person(String name,int age,double height,boolean married) < this.name = name; this.age = age; this.height = height; this.married = married; >> public class Example < public static void main(String[] args) < FileOutputStream fos; fos = new FileOutputStream("c:/data/persons.dat"); try < ObjectOutputStream oos; Person person; oos = new ObjectOutputStream(fos); person = new Person("Остап Бендер",35,175,false); oos.writeObject (person); >catch(Exception e) < System.out.println(e.getMessage()); >> >

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

Класс PipedOutputStream

Пакет java.io содержит класс PipedOutputStream, который может быть подключен к PipedInputStream, используемый для установления связи между двумя каналами. Данные в PipedOutputStream передаются в потоке Thread, который отправляет их в подключенный PipedInputStream, где данные также читаются, но в другом потоке.

То есть, класс PipedOutputStream предназначен для передачи информации между программами через каналы (pipes).

Наиболее часто используемые методы класса PipedOutputStream :

  • void write(int b) — запись байта в канал
  • void write(byte[] bytes, int off, int len) — запись определенного количества len байт начиная со смещения off массив bytes
  • connect(PipedInputStream pis) — установление связи в каналом ввода pis
  • close() — закрытие канала
  • flush() — сброс данных в канал

Все методы класса могут вызвать исключение IOException.

Пример использования класса PipedOutputStream :

import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class Example < public static void main(String[] args) < PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(); byte[] bytes = "Hello, World!".getBytes(); try < // Установление связи между "трубами" pos.connect(pis); // Запись данных в PipedOutputStream for (int i = 0; i < bytes.length; i++) pos.write(bytes[i]); // Чтение данных из PipedInputStream int c; while((c = pis.read() ) != -1) < System.out.print((char) c); >> catch (IOException ioe) < System.out.println(ioe); >> >

Что делает метод reset в классе objectoutputstream

ObjectOutputStream пишет, что примитивные типы данных и графики Java возражают против OutputStream. Объекты могут быть считаны (воссозданное) использование ObjectInputStream. Персистентное хранение объектов может быть выполнено при использовании файла для потока. Если поток является сетевым потоком сокета, объекты могут быть воссозданы на другом узле или в другом процессе. Только объекты, которые поддерживают java.io. Сериализуемый интерфейс может быть записан потокам. Класс каждого сериализуемого объекта кодируется включая имя класса и подпись класса, значения полей объекта и массивов, и закрытия любых других объектов, на которые ссылаются от начальных объектов. Метод writeObject используется, чтобы записать объект в поток. Любой объект, включая Строки и массивы, пишется с writeObject. Многократные объекты или примитивы могут быть записаны потоку. Объекты должны быть считаны назад из соответствующего ObjectInputstream с теми же самыми типами и в том же самом порядке, как они были записаны. Примитивные типы данных могут также быть записаны потоку, используя соответствующие методы от DataOutput. Строки могут также быть записаны, используя writeUTF метод. Механизм сериализации по умолчанию для объекта пишет класс объекта, подписи класса, и значений всех непереходных и нестатических полей. Ссылки на другие объекты (кроме в переходных или статических полях) заставляют те объекты быть записанными также. Многократные ссылки на единственный объект кодируются, используя ссылочный механизм разделения доступа так, чтобы графики объектов могли быть восстановлены той же самой форме как тогда, когда оригинал был записан. Например, чтобы записать объект, который может быть считан примером в ObjectInputStream:

FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeInt(12345); oos.writeObject("Today"); oos.writeObject(new Date()); oos.close();

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

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

writeObject метод ответственен за запись состояния объекта для его определенного класса так, чтобы соответствующий readObject метод мог восстановить это. Метод не должен интересоваться состоянием, принадлежащим суперклассам объекта или подклассам. Государство сохраняется при записи отдельных полей в ObjectOutputStream, используя writeObject метод или при использовании методов для примитивных типов данных, поддерживаемых DataOutput. Сериализация не выписывает поля любого объекта, который не реализует java.io. Сериализуемый интерфейс. Подклассы Объектов, которые не сериализуемы, могут быть сериализуемыми. В этом случае у несериализуемого класса должен быть конструктор без аргументов, чтобы позволить его полям быть инициализированными. В этом случае это — обязанность подкласса сохранить и восстановить состояние несериализуемого класса. Это часто имеет место, что поля того класса доступны (общественность, пакет, или защищенный) или что есть, получают и устанавливают методы, которые могут использоваться, чтобы восстановить состояние. Сериализация объекта может быть предотвращена, реализовывая writeObject и readObject методы, которые бросают NotSerializableException. Исключение будет поймано ObjectOutputStream и прервет процесс сериализации. Реализация интерфейса Externalizable позволяет объекту принять полный контроль над содержанием и форматом сериализированной формы объекта. Методы интерфейса Externalizable, writeExternal и readExternal, вызывают, чтобы сохранить и восстановить состояние объектов. Когда реализовано классом они могут записать и считать свое собственное состояние, используя все методы ObjectOutput и ObjectInput. Это — ответственность объектов обработать любое управление версиями, которое происходит. Перечислимые константы сериализируются по-другому чем обычный сериализуемый или объекты externalizable. Сериализированная форма перечислимой константы состоит исключительно из ее имени; значения полей константы не передаются. Чтобы сериализировать перечислимую константу, ObjectOutputStream пишет строку, возвращенную методом имени константы. Как другое сериализуемое или объекты externalizable, перечислимые константы могут функционировать как цели обратных ссылок, появляющихся впоследствии в потоке сериализации. Процесс, которым сериализируются перечислимые константы, не может быть настроен; любой специфичный для класса writeObject и writeReplace методы, определенные перечислимыми типами, игнорируются во время сериализации. Точно так же любой serialPersistentFields или serialVersionUID полевые объявления также игнорируются — у всех перечислимых типов есть фиксированный serialVersionUID 0L. Примитивные данные, исключая сериализуемые поля и externalizable данные, пишутся ObjectOutputStream в блочных записях данных. Блочная запись данных составляется из заголовка и данных. Блочный заголовок данных состоит из маркера и числа байтов, чтобы следовать за заголовком. Последовательные примитивные записи данных объединяются в одну блочную запись данных. Число записей в блоке, используемое для блочной записи данных, составит 1024 байта. Каждая блочная запись данных будет заполнена до 1024 байтов, или будет записана всякий раз, когда есть завершение блочного режима данных. Звонки в методы ObjectOutputStream writeObject, defaultWriteObject и writeFields первоначально завершают любую существующую блочную запись данных.

Вложенная Сводка Класса

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

Модификатор и Тип Класс и Описание
static class ObjectOutputStream. PutField

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *