JavaTM Platform
Standard Ed. 6

java.io
클래스 ObjectOutputStream

java.lang.Object 
  상위를 확장 java.io.OutputStream 
      상위를 확장 java.io.ObjectOutputStream
모든 구현된 인터페이스:
Closeable , DataOutput , Flushable , ObjectOutput , ObjectStreamConstants


public class ObjectOutputStream
extends OutputStream
implements ObjectOutput , ObjectStreamConstants

ObjectOutputStream 는, 기본 데이터형과 Java 객체의 그래프를 OutputStream 에 기입합니다. 이러한 객체를 읽어들이려면 (재구축 하기) ObjectInputStream 를 사용합니다. 객체의 지속적 기억은, 그 스트림을 위한 파일을 사용하면 가능합니다. 스트림이 네트워크 소켓 스트림의 경우는, 다른 호스트나 다른 프로세스상에서 객체를 재구축 할 수도 있습니다.

스트림에 기입할 수 있는 것은 java.io.Serializable 인터페이스를 지원하는 객체만입니다. 각 직렬화 가능 객체의 클래스는, 클래스의 이름과 시그니챠, 객체의 필드와 배열, 및 초기 객체로부터 참조되는 것 외의 모든 객체의 크로 전기밥통을 포함해 코드화 됩니다.

객체를 스트림에 기입하려면 writeObject 메소드를 사용합니다. String 나 배열을 포함한 임의의 객체가 writeObject 에 의해 기입해집니다. 복수의 객체 또는 프리미티브(primitive)도, 스트림에의 기입이 가능합니다. 객체를 읽어들일 때는, 대응하는 ObjectInputstream 로부터 같은 형태로서 한편 기입해졌을 때와 같은 순서로 읽어들이지 않으면 안됩니다.

기본 데이터형을 스트림에 기입하려면 , DataOutput 의 적절한 메소드를 사용합니다. String 를 기입하는 경우는 writeUTF 메소드를 사용합니다.

객체의 디폴트의 직렬화 기구는, 객체의 클래스, 클래스의 시그니챠, 및 모든 비 transient 및 비 static 필드의 값을 기입합니다. 다른 객체에의 참조 (transient 및 static 필드는 제외하다)가 있으면, 이러한 객체도 기입해집니다. 단일 객체에의 다중 참조는 참조 공유 기구에 의해 encode 되어 객체의 그래프를, 오리지날이 기입해졌을 때의 형상에 복원할 수가 있습니다.

예를 들어, 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 메소드가 객체 상태를 복원할 수 있도록(듯이) 하는 역할을 담당합니다. 이 메소드는, 객체의 슈퍼 클래스나 서브 클래스에 속하는 상태에 관여할 필요는 없습니다. 상태를 보존하려면 , writeObject 메소드를 사용해 개개의 필드를 ObjectOutputStream 에 기입하는지, 또는 DataOutput 가 지원하는 기본 데이터형용의 메소드를 사용합니다.

직렬화에서는, java.io.Serializable 인터페이스를 구현하지 않는 객체의 필드는 기입하지 않습니다. 직렬화 가능하지 않은 객체의 서브 클래스를 직렬화 가능하게 하는 것은 가능합니다. 이 경우, 직렬화 가능하지 않은 클래스는, 그 필드를 초기화할 수 있도록(듯이) 하기 위한(해), 인수 없음의 생성자 을 가질 필요가 있습니다. 이 경우, 직렬화 가능하지 않은 클래스 상태를 보존 및 복원하는 것은, 서브 클래스의 책임이 됩니다. 그 클래스의 필드가 액세스 가능한 (public, package, 또는 protected) 경우, 혹은 상태의 복원에 이용할 수 있는 set 메소드나 get 메소드가 있는 경우가 자주 있습니다.

writeObject 및 readObject 메소드로 NotSerializableException 를 throw 하도록(듯이) 구현해 두면(자), 객체의 직렬화를 방지할 수 있습니다. 예외가 ObjectOutputStream 에 캐치 되어 직렬화 처리가 이상종료(ABEND) 합니다.

Externalizable 인터페이스를 구현하면(자), 객체의 직렬화 된 형식의 내용 및 형식을 객체측이 완전하게 제어하는 것이 가능하게 됩니다. Externalizable 인터페이스의 메소드인 writeExternal 와 readExternal 는, 객체 상태를 보존 및 복원하기 위해서(때문에) 불려 갑니다. 이러한 메소드는, 클래스에 의해 구현되었을 경우에는, ObjectOutput 와 ObjectInput 의 모든 메소드를 사용해, 자신 상태의 기입 및 read를 실시할 수가 있습니다. 어떠한 버젼이어도 처리할 수 있도록(듯이) 하는 것은, 객체의 책임입니다.

enum 정수의 직렬화는, 일반적으로의 직렬화 가능 또는 외부화 가능 객체와는 다릅니다. enum 정수의 직렬화 된 형식을 구성하는 것은, 그 이름 뿐입니다. 정수의 필드치는 전송 되지 않습니다. enum 정수를 직렬화하려면 , 그 정수의 name 메소드에 의해 반환되는 캐릭터 라인을 ObjectOutputStream 로 기입합니다. 다른 직렬화 가능 또는 외부화 가능 객체 같이 enum 정수는, 이후 직렬화 스트림에 출현하는 후방 참조의 대상으로 해 기능할 수 있습니다. enum 정수를 직렬화하는 프로세스를 커스터마이즈 할 수 없습니다. enum 형으로 정의된, 클래스 고유의 writeObject 메소드 및 writeReplace 메소드는, 직렬화 복원동안은 무시됩니다. 같이 serialPersistentFields 또는 serialVersionUID 의 필드 선언도 모두 무시됩니다. 모든 enum 형은 0L 로 고정된 serialVersionUID 를 가집니다.

직렬화 가능 필드 및 외부화 가능 데이터를 제외한 프리미티브(primitive) 데이터는, 블록 데이터 레코드로서 ObjectOutputStream 에 기입해집니다. 블록 데이터 레코드는, 헤더와 데이터로 구성됩니다. 블록 데이터의 헤더는, 마커 및 헤더에 계속되는 바이트수로 구성됩니다. 연속하는 프리미티브(primitive) 데이터의 기입은, 1 개의 블록 데이터 레코드에 머지 됩니다 블록 데이터 레코드에 사용되는 블록 계수는 1024 바이트입니다. 각 블록 데이터 레코드는, 1024 바이트까지 파묻히는지, 블록 데이터 모드의 종료까지 기입해집니다. ObjectOutputStream 의 메소드 writeObject, defaultWriteObject, 및 writeFields 를 호출하면(자), 최초로 기존의 블록 데이터 레코드가 종료됩니다.

도입된 버젼:
JDK1. 1
관련 항목:
DataOutput , ObjectInputStream , Serializable , Externalizable , 「객체 직렬화 스펙」의 제 2 장 「객체 출력 클래스」

상자의 클래스의 개요
static class ObjectOutputStream.PutField
          ObjectOutput 에 기입해지는 지속 필드에의 프로그램에 의한 액세스를 제공합니다.
 
필드의 개요
 
인터페이스 java.io. ObjectStreamConstants 로부터 상속된 필드
baseWireHandle , PROTOCOL_VERSION_1 , PROTOCOL_VERSION_2 , SC_BLOCK_DATA , SC_ENUM , SC_EXTERNALIZABLE , SC_SERIALIZABLE , SC_WRITE_METHOD , STREAM_MAGIC , STREAM_VERSION , SUBCLASS_IMPLEMENTATION_PERMISSION , SUBSTITUTION_PERMISSION , TC_ARRAY , TC_BASE , TC_BLOCKDATA , TC_BLOCKDATALONG , TC_CLASS , TC_CLASSDESC , TC_ENDBLOCKDATA , TC_ENUM , TC_EXCEPTION , TC_LONGSTRING , TC_MAX , TC_NULL , TC_OBJECT , TC_PROXYCLASSDESC , TC_REFERENCE , TC_RESET , TC_STRING
 
생성자 의 개요
protected ObjectOutputStream ()
          ObjectOutputStream 를 완전하게 다시 구현하는 서브 클래스가, ObjectOutputStream 의 이 구현에 의해 사용된지 얼마 안된 private 데이터를 할당할 필요가 없게 하는 수단을 제공합니다.
  ObjectOutputStream (OutputStream  out)
          지정된 OutputStream 에 기입하는 ObjectOutputStream 를 작성합니다.
 
메소드의 개요
protected  void annotateClass (Class <? > cl)
          서브 클래스는, 이 메소드를 구현해, 클래스의 데이터를 스트림에 보존할 수 있도록(듯이) 할 수가 있습니다.
protected  void annotateProxyClass (Class <? > cl)
          서브 클래스는 이 메소드를 구현해, 다이나믹 프록시 클래스에 대한 기술자와 함께 커스텀 데이터를 스트림에 포함합니다.
 void close ()
          스트림을 닫습니다.
 void defaultWriteObject ()
          현재의 클래스의 비 static 및 비 transient 의 필드를, 이 스트림에 기입합니다.
protected  void drain ()
          ObjectOutputStream 내의 버퍼링 되고 있는 데이터를 모두 배출합니다.
protected  boolean enableReplaceObject (boolean enable)
          스트림의 객체를 치환할 수 있도록(듯이) 합니다.
 void flush ()
          스트림을 플래시 합니다.
 ObjectOutputStream.PutField putFields ()
          스트림에 기입해지는 지속 필드를 버퍼에 포함하기 위해서 사용되는 객체를 가져옵니다.
protected  Object replaceObject (Object  obj)
          이 메소드는, 직렬화 시에, ObjectOutputStream 의 신뢰할 수 있는 서브 클래스가, 어느 객체를 다른 객체에 치환할 수 있도록(듯이) 합니다.
 void reset ()
          Reset 는, 스트림에 벌써 기입해지고 있는 객체 상태를 무효로 합니다.
 void useProtocolVersion (int version)
          스트림의 기입시에 사용하는 스트림 프로토콜의 버젼을 지정합니다.
 void write (byte[] buf)
          바이트 배열을 기입합니다.
 void write (byte[] buf, int off, int len)
          바이트 배열의 일부를 기입합니다.
 void write (int val)
          바이트를 기입합니다.
 void writeBoolean (boolean val)
          boolean 를 기입합니다.
 void writeByte (int val)
          8 비트의 바이트를 기입합니다.
 void writeBytes (String  str)
          String 를 바이트의 열로서 기입합니다
 void writeChar (int val)
          16 비트의 char 를 기입합니다.
 void writeChars (String  str)
          String 를 char 의 열로서 기입합니다.
protected  void writeClassDescriptor (ObjectStreamClass  desc)
          지정된 클래스 기술자를 ObjectOutputStream 에 기입합니다.
 void writeDouble (double val)
          64 비트의 double 를 기입합니다.
 void writeFields ()
          버퍼에 포함된 필드를 스트림에 기입합니다.
 void writeFloat (float val)
          32 비트의 float 를 기입합니다.
 void writeInt (int val)
          32 비트의 int 를 기입합니다.
 void writeLong (long val)
          64 비트의 long 를 기입합니다.
 void writeObject (Object  obj)
          지정된 객체를 ObjectOutputStream 에 기입합니다.
protected  void writeObjectOverride (Object  obj)
          서브 클래스가 디폴트의 writeObject 메소드를 오버라이드(override) 하기 위해서 사용하는 메소드입니다.
 void writeShort (int val)
          16 비트의 short 를 기입합니다.
protected  void writeStreamHeader ()
          서브 클래스가 자신의 헤더를 스트림의 전 또는 뒤로 추가할 수 있도록(듯이) 제공되고 있습니다.
 void writeUnshared (Object  obj)
          ObjectOutputStream 에 「공유되지 않는다」객체를 기입합니다.
 void writeUTF (String  str)
          이 String 의 프리미티브(primitive) 데이터를수정 UTF-8 형식에서 기입합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

ObjectOutputStream

public ObjectOutputStream(OutputStream  out)
                   throws IOException 
지정된 OutputStream 에 기입하는 ObjectOutputStream 를 작성합니다. 이 생성자 은, 직렬화 스트림 헤더를 기본이 되는 스트림에 기입합니다. 이 스트림은 호출해 옆에서 즉시 플래시 해 주세요. ObjectInputStreams 를 받은 생성자 은, 헤더-를 읽어들일 때 블록 하기 (위해)때문에입니다.

시큐리티 매니저가 인스톨 되고 있는 경우, ObjectOutputStream.putFields 메소드 또는 ObjectOutputStream.writeUnshared 메소드를 오버라이드(override) 하는 서브 클래스의 생성자 에 의해 SerializablePermission("enableSubclassImplementation")가 직접 또는 간접에 불려 갔을 때에, 이 생성자 은 이 액세스권을 확인합니다.

파라미터:
out - 기입처의 출력 스트림
예외:
IOException - 스트림 헤더의 기입중에 입출력 에러가 발생했을 경우
SecurityException - 신뢰되어 있지 않은 서브 클래스가, 시큐리티상 중요한 메소드를 부정하게 오버라이드(override) 했을 경우
NullPointerException - outnull 의 경우
도입된 버젼:
1.4
관련 항목:
ObjectOutputStream() , putFields() , ObjectInputStream.ObjectInputStream(InputStream)

ObjectOutputStream

protected ObjectOutputStream()
                      throws IOException ,
                             SecurityException 
ObjectOutputStream 를 완전하게 다시 구현하는 서브 클래스가, ObjectOutputStream 의 이 구현에 의해 사용된지 얼마 안된 private 데이터를 할당할 필요가 없게 하는 수단을 제공합니다.

시큐리티 매니저가 인스톨 되고 있는 경우, 이 메소드는 우선 시큐리티 매니저의 checkPermission 메소드를 액세스권 SerializablePermission("enableSubclassImplementation") 로 호출해, 서브 클래스화를 유효하게 할 수 있도록(듯이) 합니다.

예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkPermission 메소드가 서브 클래스화를 유효하게 하는 것을 거부했을 경우
IOException
관련 항목:
SecurityManager.checkPermission(java.security.Permission) , SerializablePermission
메소드의 상세

useProtocolVersion

public void useProtocolVersion(int version)
                        throws IOException 
스트림의 기입시에 사용하는 스트림 프로토콜의 버젼을 지정합니다.

이 루틴은, 현재의 버젼의 직렬화가, 전의 버젼의 스트림 형식과 하위 호환성이 있는 형식에서 기입할 수 있도록(듯이) 하는 훅을 제공합니다.

하위 호환성이 없는 형식이 한층 더 도입되는 것을 막기 위해서(때문에) 모든 노력을 합니다만, 선택의 여지가 없는 경우도 있습니다.

파라미터:
version - java.io.ObjectStreamConstants 로부터 ProtocolVersion 를 사용
예외:
IllegalStateException - 객체가 직렬화 된 뒤에 불려 갔을 경우
IllegalArgumentException - 건네받은 버젼이 무효인 경우
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.2
관련 항목:
ObjectStreamConstants.PROTOCOL_VERSION_1 , ObjectStreamConstants.PROTOCOL_VERSION_2

writeObject

public final void writeObject(Object  obj)
                       throws IOException 
지정된 객체를 ObjectOutputStream 에 기입합니다. 객체의 클래스, 클래스의 시그니챠, 클래스의 비 transient 필드 및 비 static 필드의 값과 그 모든 슈퍼타입이 기입해집니다. 어느 클래스에 도착해 디폴트의 직렬화는, writeObject 메소드와 readObject 메소드를 사용해 오버라이드(override) 할 수가 있습니다. 이 객체에 의해 참조되는 객체는 중간적으로 기입해져 거기에 따라, 완전하게 동등한 객체 그래프가 ObjectInputStream 에 의해 재구축 됩니다.

예외는, OutputStream 에 관한 문제나, 직렬화 해서는 안되는 클래스에 도착해 throw 됩니다. 모든 예외는, OutputStream 에 있어 치명적이어, OutputStream 를 불확정인 상태로 합니다. 스트림 상태를 무시할까 회복 처리할까를 결정하는 것은 호출측입니다.

정의:
인터페이스 ObjectOutput 내의 writeObject
파라미터:
obj - 기입해지는 객체
예외:
InvalidClassException - 직렬화로 사용되는 클래스에 하등의 불편이 있었을 경우
NotSerializableException - 직렬화의 대상 객체가 java.io.Serializable 인터페이스를 구현하고 있지 않는 경우
IOException - 기본이 되는 OutputStream 가 예외를 throw 했을 경우

writeObjectOverride

protected void writeObjectOverride(Object  obj)
                            throws IOException 
서브 클래스가 디폴트의 writeObject 메소드를 오버라이드(override) 하기 위해서 사용하는 메소드입니다. 이 메소드는, 인수 없음의 protected 생성자 을 사용해, ObjectInputStream 를 구축한 ObjectInputStream 의 신뢰할 수 있는 서브 클래스에 의해 불려 갑니다. 서브 클래스는, 수식자가 final 의 오버라이드(override) 메소드를 제공한다고 보입니다.

파라미터:
obj - 기본이 되는 스트림에 기입해지는 객체
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우
도입된 버젼:
1.2
관련 항목:
ObjectOutputStream() , writeObject(Object)

writeUnshared

public void writeUnshared(Object  obj)
                   throws IOException 
ObjectOutputStream 에 「공유되지 않는다」객체를 기입합니다. 이 메소드는, writeObject 와 닮아 있습니다. 다만, 직렬화 된 인스턴스를 가리키는 역참조로서가 아니고, 스트림내에서 일의의 새로운 객체로서 기입합니다. 구체적으로는, 다음과 같이 됩니다. writeUnshared 를 개입시켜 객체를 기입하는 것 자체는, 객체가 직렬화 복원되었을 때에 그 객체에의 일의 참조를 보증하는 것이 아닙니다만, 1 개의 객체가 스트림내에서 여러 차례 정의되는 것은 가능하게 됩니다. 그 때문에, 수취하는 측이 readUnshared 를 여러 차례 호출해도 충돌이 생기지 않습니다. 여기서 설명한 규칙은, writeUnshared 에 의해 기입해진 기본 레벨의 객체인 만큼 적용되어 직렬화 되는 객체의 그래프내에서 일시적으로 참조되는 서브 객체에는 일절 적용되지 않습니다.

이 메소드를 오버라이드(override) 하는 ObjectOutputStream 서브 클래스는, SerializablePermission("enableSubclassImplementation")를 가지는 시큐리티 문맥내에서만 구축할 수 있습니다. 이 액세스권을 가지지 않는 시큐리티 문맥으로 인스턴스화하려고 하면(자), SecurityException 가 throw 됩니다.

파라미터:
obj - 스트림에 기입하는 객체
예외:
NotSerializableException - 직렬화하는 그래프내의 객체가 Serializable 인터페이스를 구현하지 않는 경우
InvalidClassException - 직렬화하는 객체의 클래스에 문제가 있는 경우
IOException - 직렬화중에 입출력 에러가 발생했을 경우
도입된 버젼:
1.4

defaultWriteObject

public void defaultWriteObject()
                        throws IOException 
현재의 클래스의 비 static 및 비 transient 의 필드를, 이 스트림에 기입합니다. 이 메소드를 호출할 수가 있는 것은, 직렬화를 하고 있는 클래스의 writeObject 메소드 뿐입니다. 다른 방법으로 불려 갔을 경우는 NotActiveException 를 throw 합니다.

예외:
IOException - 기본이 되는 OutputStream 의 기입중에 입출력 에러가 발생했을 경우

putFields

public ObjectOutputStream.PutField  putFields()
                                      throws IOException 
스트림에 기입해지는 지속 필드를 버퍼에 포함하기 위해서 사용되는 객체를 가져옵니다. 필드는, writeFields 메소드가 불려 갔을 때에 스트림에 기입해집니다.

반환값:
직렬화 가능 필드를 보관 유지하고 있는 Putfield 클래스의 인스턴스
예외:
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.2

writeFields

public void writeFields()
                 throws IOException 
버퍼에 포함된 필드를 스트림에 기입합니다.

예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우
NotActiveException - 객체 상태를 기입하기 위해서(때문에) 클래스의 writeObject 메소드가 불려 가지 않았을 때에 불려 갔을 경우
도입된 버젼:
1.2

reset

public void reset()
           throws IOException 
Reset 는, 스트림에 벌써 기입해지고 있는 객체 상태를 무효로 합니다. 새로운 ObjectOutputStream 와 같은 상태에 리셋 됩니다. 스트림의 현재 위치에 마크가 설정되어 대응하는 ObjectInputStream 도 같은 위치에 리셋 됩니다. 그 이전에 스트림에 기입해지고 있던 객체는, 스트림상에 있다고는 보이지 않습니다. 이러한 객체는, 스트림에 재차 기입해집니다.

예외:
IOException - 객체를 직렬화중에 reset()가 불려 갔을 경우

annotateClass

protected void annotateClass(Class <? > cl)
                      throws IOException 
서브 클래스는, 이 메소드를 구현해, 클래스의 데이터를 스트림에 보존할 수 있도록(듯이) 할 수가 있습니다. 디폴트에서는 이 메소드는 아무것도 실시하지 않습니다. ObjectInputStream 내에서 대응하는 메소드는 resolveClass 입니다. 이 메소드는, 스트림의 일의의 클래스 각각 붙어 1 회만 불려 갑니다. 그 시점에서 클래스명과 시그니챠는 벌써 스트림에 기입해지고 있습니다. 이 메소드는, ObjectOutputStream 를 자유롭게 사용해, 적절이라고 판단한 클래스의 임의의 표현 (클래스 파일의 바이트등)을 보존할 수 있습니다. ObjectInputStream 의 대응하는 서브 클래스의 resolveClass 메소드는, annotateClass 에 의해 기입해진 데이터나 객체를 읽어들여, 사용하지 않으면 안됩니다.

파라미터:
cl - 커스텀 데이터에 주석을 붙이는 클래스
예외:
IOException - 기본이 되는 OutputStream 가 예외를 throw 했을 경우

annotateProxyClass

protected void annotateProxyClass(Class <? > cl)
                           throws IOException 
서브 클래스는 이 메소드를 구현해, 다이나믹 프록시 클래스에 대한 기술자와 함께 커스텀 데이터를 스트림에 포함합니다.

이 메소드는 스트림의 일의의 각 프록시 클래스 기술자에 대해 1 회만 불려 갑니다. ObjectOutputStream 내의 이 메소드의 디폴트 구현은, 아무것도 실행하지 않습니다.

ObjectInputStream 내에서 대응하는 메소드는 resolveProxyClass 입니다. 이 메소드를 오버라이드(override) 하는 ObjectOutputStream 의 지정된 서브 클래스에 대해서는,ObjectInputStream 내의 대응하는 서브 클래스의 resolveProxyClass 메소드가,annotateProxyClass 가 기입하는 데이터 또는 객체를 모두 읽어낼 필요가 있습니다.

파라미터:
cl - 커스텀 데이터에 주석을 붙이는 프록시 클래스
예외:
IOException - 기본이 되는 OutputStream 가 예외를 throw 했을 경우
도입된 버젼:
1.3
관련 항목:
ObjectInputStream.resolveProxyClass(String[])

replaceObject

protected Object  replaceObject(Object  obj)
                        throws IOException 
이 메소드는, 직렬화 시에, ObjectOutputStream 의 신뢰할 수 있는 서브 클래스가, 어느 객체를 다른 객체에 치환할 수 있도록(듯이) 합니다. 객체의 치환은, enableReplaceObject 가 불려 갈 때까지는 실시할 수 없습니다. enableReplaceObject 메소드는, 객체의 치환을 요구하고 있는 스트림을 신뢰할 수 있을지 어떨지를 조사합니다. 직렬화 스트림에 기입해지는 각 객체의 쳐 최초로 출현한 것은, replaceObject 에게 건네집니다. 그 이후의 객체에의 참조는, replaceObject 의 원의 호출에 의해 반환된 객체에 의해 치환됩니다. 객체의 private 상태가 의도하지 않고 공개되는 것이 없게, replaceObject 를 사용하는 것은 신뢰할 수 있는 스트림로 한정됩니다.

ObjectOutputStream.writeObject 메소드는 Object 형의 파라미터 (Serializable 형과는 다르다)를 취해, 직렬화 가능하지 않은 객체가 직렬화 가능 객체로 옮겨지도록(듯이) 합니다.

서브 클래스는, 객체를 치환할 때, 직렬화 복원 실행시에 상보적인 치환을 하도록(듯이) 하는지, 또는 치환된 객체와 참조가 포함되는 각 필드와의 호환성을 유지하도록(듯이) 할 필요가 있습니다. 필드 또는 배열 요소의 형태의 서브 클래스가 아닌 형태의 객체는, 예외를 발생시키는 것에 의해 직렬화를 중단해, 그 결과 객체는 포함되지 않습니다.

이 메소드는, 각 객체가 최초로 검출되었을 때에 1 회만 불려 갑니다. 이것 이후 검출되는 그 객체에의 참조는, 새로운 객체에 리다이렉트(redirect) 됩니다. 이 메소드는, 치환되는 객체 또는 원의 객체를 돌려주게 됩니다.

치환되는 객체로서 null 를 돌려줄 수도 있습니다만, 오리지날 객체에의 참조를 포함한 클래스에서는, null 는 아니고 객체가 반환되는 것을 가정하고 있는 것이 있어, 이 경우는 NullReferenceException 가 throw 됩니다.

파라미터:
obj - 옮겨놓을 수 있는 객체
반환값:
지정된 객체와 옮겨놓을 수 있었던 대체 객체
예외:
IOException - 기본이 되는 OutputStream 가 예외를 throw 했을 경우

enableReplaceObject

protected boolean enableReplaceObject(boolean enable)
                               throws SecurityException 
스트림의 객체를 치환할 수 있도록(듯이) 합니다. 치환이 가능하게 되면(자), replaceObject 메소드가, 직렬화 되는 각 객체에 대해 불려 갑니다.

enable 가 true 로, 시큐리티 매니저가 인스톨 되고 있는 경우, 이 메소드는 우선 시큐리티 매니저의 checkPermission 메소드를 액세스권 SerializablePermission("enableSubstitution") 로 호출해, 스트림의 객체를 스트림을 치환할 수 있도록(듯이) 합니다.

파라미터:
enable - 객체의 치환을 가능하게 하는 boolean 파라미터
반환값:
이 메소드가 불려 가기 전의 설정
예외:
SecurityException - 시큐리티 매니저가 존재해, 그 checkPermission 메소드가, 스트림의 객체의 스트림에 의한 치환을 허가하지 않았던 경우
관련 항목:
SecurityManager.checkPermission(java.security.Permission) , SerializablePermission

writeStreamHeader

protected void writeStreamHeader()
                          throws IOException 
서브 클래스가 자신의 헤더를 스트림의 전 또는 뒤로 추가할 수 있도록(듯이) 제공되고 있습니다. 이 메소드는, 매직 번호와 버젼 정보를 스트림에 기입합니다.

예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeClassDescriptor

protected void writeClassDescriptor(ObjectStreamClass  desc)
                             throws IOException 
지정된 클래스 기술자를 ObjectOutputStream 에 기입합니다. 클래스 기술자는 스트림에 기입해진 객체의 클래스를 식별할 때에 사용합니다. ObjectOutputStream 의 서브 클래스에서 이 메소드를 오버라이드(override) 하는 것으로써, 직렬화 스트림에 클래스 기술자를 기입하는 방법을 커스터마이즈 할 수 있습니다. 그 후, ObjectInputStream 내의 대응하는 메소드 readClassDescriptor 을 오버라이드(override) 해, 커스텀의 스트림 표현으로부터 클래스 기술자를 재구축 하도록 해 주세요. 디폴트에서는, 이 메소드는 클래스 기술자를 객체 직렬화 스펙에 정의된 형식에서 기입합니다.

이 메소드를 호출할 수가 있는 것은, ObjectOutputStream 의 useProtocolVersion 메소드를 호출하는 것에 의해 설정되는 낡은 직렬화 스트림 형식을 ObjectOutputStream 가 사용하고 있지 않는 경우뿐인 점에 주의해 주세요. 이 직렬화 스트림이 낡은 형식 (PROTOCOL_VERSION_1)을 사용하고 있는 경우, 클래스 기술자는 오버라이드(override) 또는 커스터마이즈가 불가능한 방법으로 내부적으로 기입해집니다.

파라미터:
desc - 스트림에 기입하는 클래스 기술자
예외:
IOException - 입출력 에러가 발생했을 경우
도입된 버젼:
1.3
관련 항목:
ObjectInputStream.readClassDescriptor() , useProtocolVersion(int) , ObjectStreamConstants.PROTOCOL_VERSION_1

write

public void write(int val)
           throws IOException 
바이트를 기입합니다. 이 메소드는 바이트가 실제로 기입해질 때까지 블록 합니다.

정의:
인터페이스 DataOutput 내의 write
정의:
인터페이스 ObjectOutput 내의 write
정의:
클래스 OutputStream 내의 write
파라미터:
val - 스트림에 기입해지는 바이트
예외:
IOException - 입출력 에러가 발생했을 경우

write

public void write(byte[] buf)
           throws IOException 
바이트 배열을 기입합니다. 이 메소드는 바이트가 실제로 기입해질 때까지 블록 합니다.

정의:
인터페이스 DataOutput 내의 write
정의:
인터페이스 ObjectOutput 내의 write
오버라이드(override):
클래스 OutputStream 내의 write
파라미터:
buf - 기입해지는 데이터
예외:
IOException - 입출력 에러가 발생했을 경우
관련 항목:
OutputStream.write(byte[], int, int)

write

public void write(byte[] buf,
                  int off,
                  int len)
           throws IOException 
바이트 배열의 일부를 기입합니다.

정의:
인터페이스 DataOutput 내의 write
정의:
인터페이스 ObjectOutput 내의 write
오버라이드(override):
클래스 OutputStream 내의 write
파라미터:
buf - 기입해지는 데이터
off - 데이터의 개시 오프셋(offset)
len - 기입해지는 바이트수
예외:
IOException - 입출력 에러가 발생했을 경우

flush

public void flush()
           throws IOException 
스트림을 플래시 합니다. 이 메소드는, 버퍼링 떠날 수 있어 모든 출력 바이트를 기입해, 기본이 되는 스트림을 통해 플래시 합니다.

정의:
인터페이스 Flushable 내의 flush
정의:
인터페이스 ObjectOutput 내의 flush
오버라이드(override):
클래스 OutputStream 내의 flush
예외:
IOException - 입출력 에러가 발생했을 경우

drain

protected void drain()
              throws IOException 
ObjectOutputStream 내의 버퍼링 되고 있는 데이터를 모두 배출합니다. 플래시와 닮아 있습니다만, 기본이 되는 스트림에 플래시를 전파 하지 않습니다.

예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

close

public void close()
           throws IOException 
스트림을 닫습니다. 스트림에 관련하는 모든 자원을 해제하기 위해서, 이 메소드를 호출할 필요가 있습니다.

정의:
인터페이스 Closeable 내의 close
정의:
인터페이스 ObjectOutput 내의 close
오버라이드(override):
클래스 OutputStream 내의 close
예외:
IOException - 입출력 에러가 발생했을 경우

writeBoolean

public void writeBoolean(boolean val)
                  throws IOException 
boolean 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeBoolean
파라미터:
val - 기입해지는 boolean 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeByte

public void writeByte(int val)
               throws IOException 
8 비트의 바이트를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeByte
파라미터:
val - 기입해지는 바이트치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeShort

public void writeShort(int val)
                throws IOException 
16 비트의 short 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeShort
파라미터:
val - 기입해지는 short 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeChar

public void writeChar(int val)
               throws IOException 
16 비트의 char 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeChar
파라미터:
val - 기입해지는 char 값
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeInt

public void writeInt(int val)
              throws IOException 
32 비트의 int 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeInt
파라미터:
val - 기입해지는 int 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeLong

public void writeLong(long val)
               throws IOException 
64 비트의 long 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeLong
파라미터:
val - 기입해지는 long 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeFloat

public void writeFloat(float val)
                throws IOException 
32 비트의 float 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeFloat
파라미터:
val - 기입해지는 float 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeDouble

public void writeDouble(double val)
                 throws IOException 
64 비트의 double 를 기입합니다.

정의:
인터페이스 DataOutput 내의 writeDouble
파라미터:
val - 기입해지는 double 치
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeBytes

public void writeBytes(String  str)
                throws IOException 
String 를 바이트의 열로서 기입합니다

정의:
인터페이스 DataOutput 내의 writeBytes
파라미터:
str - 기입해지는 바이트의 캐릭터 라인
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeChars

public void writeChars(String  str)
                throws IOException 
String 를 char 의 열로서 기입합니다.

정의:
인터페이스 DataOutput 내의 writeChars
파라미터:
str - 기입해지는 char 의 캐릭터 라인
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

writeUTF

public void writeUTF(String  str)
              throws IOException 
이 String 의 프리미티브(primitive) 데이터를수정 UTF-8 형식에서 기입합니다. 스트림에 String 를 프리미티브(primitive) 데이터로서 기입하는 것으로, Object 로서 기입하는 것에는 큰 차이가 있습니다. writeObject 에 의해 기입해지는 String 의 인스턴스는, 처음은 String 로서 스트림에 기입해집니다. 그 이후의 writeObject()의 호출은, 캐릭터 라인에의 참조를 스트림에 기입합니다.

정의:
인터페이스 DataOutput 내의 writeUTF
파라미터:
str - 기입해지는 캐릭터 라인
예외:
IOException - 기본이 되는 스트림의 기입중에 입출력 에러가 발생했을 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.