Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ObjectOutputStream extends OutputStream implements ObjectOutput, ObjectStreamConstants
Только объекты, которые поддерживают 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 первоначально завершают любую существующую блочную запись данных.
DataOutput
, ObjectInputStream
, Serializable
, Externalizable
, Объектная Спецификация Сериализации, Раздел 2, Объектные Выходные классыМодификатор и Тип | Класс и Описание |
---|---|
static class |
ObjectOutputStream. PutField
Обеспечьте программируемый доступ к персистентным полям, которые будут записаны ObjectOutput.
|
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
Модификатор | Конструктор и Описание |
---|---|
protected |
ObjectOutputStream()
Обеспечьте путь к подклассам, которые полностью повторно реализуют ObjectOutputStream, чтобы не должными быть выделить частные данные, только используемые этой реализацией ObjectOutputStream.
|
|
ObjectOutputStream(OutputStream out)
Создает ObjectOutputStream, который пишет в указанный OutputStream.
|
Модификатор и Тип | Метод и Описание |
---|---|
protected void |
annotateClass(Class<?> cl)
Подклассы могут реализовать этот метод, чтобы позволить данным класса быть сохраненными в потоке.
|
protected void |
annotateProxyClass(Class<?> cl)
Подклассы могут реализовать этот метод, чтобы хранить пользовательские данные в потоке наряду с дескрипторами для динамических прокси-классов.
|
void |
close()
Закрывает поток.
|
void |
defaultWriteObject()
Запишите нестатические и непереходные поля текущего класса этого потока.
|
protected void |
drain()
Истощите любые буферизованные данные в ObjectOutputStream.
|
protected boolean |
enableReplaceObject(boolean enable)
Позвольте потоку сделать замену объектов в потоке.
|
void |
flush()
Сбрасывает поток.
|
ObjectOutputStream. PutField |
putFields()
Получите объект, используемый, чтобы буферизовать персистентные поля, которые будут записаны потоку.
|
protected Object |
replaceObject(Object obj)
Этот метод позволит доверенным подклассам ObjectOutputStream заменять одним объектом другого во время сериализации.
|
void |
reset()
Сброс игнорирует состояние любых объектов, уже записанных потоку.
|
void |
useProtocolVersion(int version)
Определите потоковую версию протокола, чтобы использовать при записи потока.
|
void |
write(byte[] buf)
Пишет массив байтов.
|
void |
write(byte[] buf, int off, int len)
Пишет sub массив байтов.
|
void |
write(int val)
Пишет байт.
|
void |
writeBoolean(boolean val)
Пишет булевская переменная.
|
void |
writeByte(int val)
Пишет байт на 8 битов.
|
void |
writeBytes(String str)
Пишет Строка как последовательность байтов.
|
void |
writeChar(int val)
Пишет случайная работа на 16 битов.
|
void |
writeChars(String str)
Пишет Строка как последовательность случайных работ.
|
protected void |
writeClassDescriptor(ObjectStreamClass desc)
Запишите указанный дескриптор класса в ObjectOutputStream.
|
void |
writeDouble(double val)
Пишут двойные 64 бита.
|
void |
writeFields()
Запишите буферизованные поля в поток.
|
void |
writeFloat(float val)
Пишет плавание на 32 бита.
|
void |
writeInt(int val)
Пишет интервал на 32 бита.
|
void |
writeLong(long val)
Пишет 64 бита длиной.
|
void |
writeObject(Object obj)
Запишите указанный объект в ObjectOutputStream.
|
protected void |
writeObjectOverride(Object obj)
Метод, используемый подклассами, чтобы переопределить значение по умолчанию writeObject метод.
|
void |
writeShort(int val)
Пишут коротких 16 битов.
|
protected void |
writeStreamHeader()
writeStreamHeader метод обеспечивается так, подклассы могут добавить или предварительно ожидать свой собственный заголовок к потоку.
|
void |
writeUnshared(Object obj)
Пишет "неразделенный" объект в ObjectOutputStream.
|
void |
writeUTF(String str)
Примитивная запись данных этой Строки в измененном формате UTF-8.
|
public ObjectOutputStream(OutputStream out) throws IOException
Если менеджер безопасности будет установлен, то этот конструктор проверит на "enableSubclassImplementation" SerializablePermission когда вызвано прямо или косвенно конструктором подкласса, который переопределяет методы ObjectOutputStream.putFields или ObjectOutputStream.writeUnshared.
out
- поток вывода, чтобы записать вIOException
- если ошибка ввода-вывода происходит при записи потокового заголовкаSecurityException
- если недоверяемый подкласс незаконно переопределяет чувствительные к безопасности методыNullPointerException
- если out
null
ObjectOutputStream()
, putFields()
, ObjectInputStream.ObjectInputStream(InputStream)
protected ObjectOutputStream() throws IOException, SecurityException
Если есть установленный менеджер безопасности, этот метод первые вызовы менеджер безопасности checkPermission
метод с a SerializablePermission("enableSubclassImplementation")
разрешение, чтобы гарантировать нормально позволять разделить на подклассы.
SecurityException
- если менеджер безопасности существует и checkPermission
метод отрицает позволять разделить на подклассы.IOException
SecurityManager.checkPermission(java.security.Permission)
, SerializablePermission
public void useProtocolVersion(int version) throws IOException
Эта подпрограмма обеспечивает рычаг, чтобы позволить текущей версии Сериализации записать в формате, который является назад совместимым с предыдущей версией потокового формата.
Каждое усилие будет приложено, чтобы избежать представлять дополнительный назад несовместимости; однако, иногда нет никакой другой альтернативы.
version
- используйте ProtocolVersion от java.io. ObjectStreamConstants.IllegalStateException
- если вызвано после того, как любые объекты были сериализированы.IllegalArgumentException
- если в недопустимой версии передают.IOException
- если ошибки ввода-вывода происходятObjectStreamConstants.PROTOCOL_VERSION_1
, ObjectStreamConstants.PROTOCOL_VERSION_2
public final void writeObject(Object obj) throws IOException
Исключения выдаются для проблем с OutputStream и для классов, которые не должны быть сериализированы. Все исключения являются фатальными для OutputStream, который покидают в неопределенном состоянии, и это до вызывающей стороны, чтобы проигнорировать или восстановить потоковое состояние.
writeObject
в интерфейсе ObjectOutput
obj
- объект, который будет записанInvalidClassException
- Что-то является неправильным с классом, используемым сериализацией.NotSerializableException
- Некоторый объект, который будет сериализирован, не реализует java.io. Сериализуемый интерфейс.IOException
- Любое исключение, выданное базовым OutputStream.protected void writeObjectOverride(Object obj) throws IOException
obj
- объект, который будет записан базовому потокуIOException
- если есть ошибки ввода-вывода при записи в базовый потокObjectOutputStream()
, writeObject(Object)
public void writeUnshared(Object obj) throws IOException
Подклассы ObjectOutputStream, которые переопределяют этот метод, могут только быть созданы в контекстах защиты, обладающих "enableSubclassImplementation" SerializablePermission; любая попытка инстанцировать такого подкласса без этого разрешения заставит SecurityException быть брошенным.
obj
- возразите, чтобы записать в потокNotSerializableException
- если объект в графике, который будет сериализирован, не реализует Сериализуемый интерфейсInvalidClassException
- если проблема существует с классом объекта, который будет сериализированIOException
- если ошибка ввода-вывода происходит во время сериализацииpublic void defaultWriteObject() throws IOException
IOException
- если ошибки ввода-вывода происходят при записи в базовое OutputStream
public ObjectOutputStream.PutField putFields() throws IOException
IOException
- если ошибки ввода-вывода происходятpublic void writeFields() throws IOException
IOException
- если ошибки ввода-вывода происходят при записи в базовый потокNotActiveException
- Вызванный, когда классы writeObject метод не был вызван, чтобы записать состояние объекта.public void reset() throws IOException
IOException
- если сброшено () вызывается, сериализируя объект.protected void annotateClass(Class<?> cl) throws IOException
cl
- класс, чтобы аннотировать пользовательские данные дляIOException
- Любое исключение, выданное базовым OutputStream.protected void annotateProxyClass(Class<?> cl) throws IOException
Однажды этот метод вызывают точно для каждого уникального дескриптора прокси-класса в потоке. Реализация по умолчанию этого метода в ObjectOutputStream
ничего не делает.
Соответствующий метод в ObjectInputStream
resolveProxyClass
. Для данного подкласса ObjectOutputStream
это переопределяет этот метод, resolveProxyClass
метод в соответствующем подклассе ObjectInputStream
должен считать любые данные или объекты, записанные annotateProxyClass
.
cl
- прокси-класс, чтобы аннотировать пользовательские данные дляIOException
- любое исключение, выданное базовым OutputStream
ObjectInputStream.resolveProxyClass(String[])
protected Object replaceObject(Object obj) throws IOException
Метод ObjectOutputStream.writeObject берет параметр Объекта типа (в противоположность Сериализуемому типу), чтобы учесть случаи, где несериализуемые объекты заменяются сериализуемыми.
Когда подкласс заменяет объекты, он должен обеспечить, чтобы или дополнительная замена была сделана во время десериализации или что объект, которым заменяют, является совместимым с каждым полем, где ссылка будет сохранена. Объекты, тип которых не является подклассом типа поля или элемента массива, прерывают сериализацию, повышая исключение, и объект не быть сохраненным.
Этот метод вызывают только однажды, когда с каждым объектом сначала встречаются. Все последующие ссылки на объект будут перенаправлены к новому объекту. Этот метод должен возвратить объект, которым заменят или исходный объект.
Нуль может быть возвращен как объект, которым заменят, но может вызвать NullReferenceException в классах, которые содержат ссылки на исходный объект, так как они могут ожидать объект вместо нуля.
obj
- объект, который будет замененIOException
- Любое исключение, выданное базовым OutputStream.protected boolean enableReplaceObject(boolean enable) throws SecurityException
Если enable
истина, и есть установленный менеджер безопасности, этот метод первые вызовы менеджер безопасности checkPermission
метод с a SerializablePermission("enableSubstitution")
разрешение, чтобы гарантировать нормально позволять потоку сделать замену объектов в потоке.
enable
- булев параметр, чтобы включить замене объектовSecurityException
- если менеджер безопасности существует и checkPermission
метод отрицает позволять потоку сделать замену объектов в потоке.SecurityManager.checkPermission(java.security.Permission)
, SerializablePermission
protected void writeStreamHeader() throws IOException
IOException
- если ошибки ввода-вывода происходят при записи в базовый потокprotected void writeClassDescriptor(ObjectStreamClass desc) throws IOException
readClassDescriptor
, должен тогда быть переопределен, чтобы воссоздать дескриптор класса от его пользовательского потокового представления. По умолчанию этот метод пишет дескрипторы класса согласно формату, определенному в Объектной спецификации Сериализации. Отметьте, что этот метод только вызовут, если ObjectOutputStream не будет использовать старый потоковый формат сериализации (установленный, вызывая ObjectOutputStream useProtocolVersion
метод). Если этот поток сериализации использует старый формат (PROTOCOL_VERSION_1
), дескриптор класса будет записан внутренне способом, который не может быть переопределен или настроен.
desc
- дескриптор класса, чтобы записать в потокIOException
- Если ошибка ввода-вывода произошла.ObjectInputStream.readClassDescriptor()
, useProtocolVersion(int)
, ObjectStreamConstants.PROTOCOL_VERSION_1
public void write(int val) throws IOException
write
в интерфейсе DataOutput
write
в интерфейсе ObjectOutput
write
в классе OutputStream
val
- байт, который будет записан потокуIOException
- Если ошибка ввода-вывода произошла.public void write(byte[] buf) throws IOException
write
в интерфейсе DataOutput
write
в интерфейсе ObjectOutput
write
в классе OutputStream
buf
- данные, которые будут записаныIOException
- Если ошибка ввода-вывода произошла.OutputStream.write(byte[], int, int)
public void write(byte[] buf, int off, int len) throws IOException
write
в интерфейсе DataOutput
write
в интерфейсе ObjectOutput
write
в классе OutputStream
buf
- данные, которые будут записаныoff
- запуск смещается в данныхlen
- число байтов, которые пишутсяIOException
- Если ошибка ввода-вывода произошла.public void flush() throws IOException
flush
в интерфейсе Flushable
flush
в интерфейсе ObjectOutput
flush
в классе OutputStream
IOException
- Если ошибка ввода-вывода произошла.protected void drain() throws IOException
IOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void close() throws IOException
close
в интерфейсе Closeable
close
в интерфейсе ObjectOutput
close
в интерфейсе AutoCloseable
close
в классе OutputStream
IOException
- Если ошибка ввода-вывода произошла.public void writeBoolean(boolean val) throws IOException
writeBoolean
в интерфейсе DataOutput
val
- булевская переменная, которая будет записанаIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeByte(int val) throws IOException
writeByte
в интерфейсе DataOutput
val
- значение байта, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeShort(int val) throws IOException
writeShort
в интерфейсе DataOutput
val
- короткое значение, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeChar(int val) throws IOException
writeChar
в интерфейсе DataOutput
val
- значение случайной работы, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeInt(int val) throws IOException
writeInt
в интерфейсе DataOutput
val
- целочисленное значение, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeLong(long val) throws IOException
writeLong
в интерфейсе DataOutput
val
- длинное значение, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeFloat(float val) throws IOException
writeFloat
в интерфейсе DataOutput
val
- значение плавающее, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeDouble(double val) throws IOException
writeDouble
в интерфейсе DataOutput
val
- двойное значение, которое будет записаноIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeBytes(String str) throws IOException
writeBytes
в интерфейсе DataOutput
str
- Строка байтов, которые будут записаныIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeChars(String str) throws IOException
writeChars
в интерфейсе DataOutput
str
- Строка случайных работ, которые будут записаныIOException
- если ошибки ввода-вывода происходят при записи в базовый потокpublic void writeUTF(String str) throws IOException
writeUTF
в интерфейсе DataOutput
str
- Строка, которая будет записанаIOException
- если ошибки ввода-вывода происходят при записи в базовый поток
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.