JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ObjectOutputStreamとは

ObjectOutputStream

日本語 物出力流れ
英語 object output stream
ふりがな おぶじぇくとあうとぷっとすとりーむ
フリガナ オブジェクトアウトプットストリーム

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.ObjectOutputStream。
ストリームクラスOutputStreamクラスサブクラスであり、バイト出力ストリームクラスである。
FilterOutputStreamクラスサブクラスに当たり、バイト出力ストリームクラスの中では「出力用」に位置する。
 
直列化可能」なクラスバイトストリームに出力する際に使用する。
クラスの「保存」をう際に、フィールドそれぞれを保存するのではなく、「まるごと」保存することを「直列化」という。この直列化クラスがObjectOutputStreamクラスである。
直列化されたクラスObjectInputStreamクラスを使用して取得することができる。
 
出力するクラスSerializableインターフェイス実装クラスでなければならない。
逆に言えば、直列化う際にはObjectOutputStreamクラスObjectInputStreamクラスを使用する、ということである。
 
ObjectOutputStreamクラスコンストラクタに他のOutputStreamクラスサブクラスを渡すことで、そのクラスを「出力先」として出力する。
ObjectOutputStreamクラスのwriteObject()メソッドで、クラスをそのままバイトストリームに出力する。つまり「直列化」をう。
処理終了後はclose()メソッドを呼び終了処理をう。
直列化されたクラスObjectInputStreamクラスを用いて取得する。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.Serializable;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        ObjectOutputStream objectOutputStream = null;
        ByteArrayInputStream byteArrayInputStream = null;
        ObjectInputStream objectInputStream = null;
        try
        {
            // まずは出力します。
            // 出力先のByteArrayOutputStreamクラスを作ります。
            byteArrayOutputStream = new ByteArrayOutputStream();
            // これを出力先とするObjectOutputStreamクラスを作ります。
            objectOutputStream = new ObjectOutputStream( byteArrayOutputStream );

            // 書き込むデータを作ります。
            SerializableData inputSerializableData = new SerializableData();
            inputSerializableData.setData( 100 );

            // データを書き込みます。
            // ここで渡すクラスは「Serializableインターフェイスの実装クラス」
            // である必要があります。
            objectOutputStream.writeObject( inputSerializableData );
            objectOutputStream.flush();

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();

            // 参考用に、byte型配列の中身を出力します。
            forint iF1 = 0; iF1 < bytes.length; ++iF1 )
            {
                System.out.print( Integer.toHexString( 0x000000FF & (int)bytes[iF1] ) + ", " );
            }
            System.out.println();
            // ac, ed, 0, 5, 73, 72, 0, 10, 53, 65, 72, 69, 61, 6c, 69, 7a, 61, 62, 6c, 65, 44, 61, 74, 61, 67, fc, 9e, 56, ef, ec, df, 21, 2, 0, 1, 49, 0, 4, 64, 61, 74, 61, 78, 70, 0, 0, 0, 64, 

            // それを読み込みます。
            // 入力元のByteArrayInputStreamクラスを作ります。
            byteArrayInputStream = new ByteArrayInputStream( bytes );
            // これを入力元とするDataOutputStreamクラスを作ります。
            objectInputStream = new ObjectInputStream( byteArrayInputStream );

            // データを取り出します。
            SerializableData outputSerializableData = (SerializableData)objectInputStream.readObject();
            System.out.println( outputSerializableData.getData() ); 
            // 100
        }
        catch( IOException e )
        {
            // 入出力に失敗した場合等に、このIOException例外が投げられます。
            e.printStackTrace();
        }
        catch( ClassNotFoundException e )
        {
            // ObjectInputStream#readObject()メソッドがthrows指定している
            // ClassNotFoundException例外を受け取ります。
            e.printStackTrace();
            return;
        }
        finally
        {
            // ストリームを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( objectInputStream != null )
                {
                    objectInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( objectOutputStream != null )
                {
                    objectOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( byteArrayOutputStream != null )
                {
                    byteArrayOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

/**
*   保存用データクラス。
*   Serializableインターフェイスの実装クラスです。
*/
class SerializableData implements Serializable
{
    /**
    *    privateなフィールド。
    */
    private int data;

    /**
    *    getter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    setter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}
// Sample.java
import java.io.Serializable;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        ByteArrayOutputStream byteArrayOutputStream = null;
        ObjectOutputStream objectOutputStream = null;
        ByteArrayInputStream byteArrayInputStream = null;
        ObjectInputStream objectInputStream = null;
        try
        {
            // まずは出力します。
            // 出力先のByteArrayOutputStreamクラスを作ります。
            byteArrayOutputStream = new ByteArrayOutputStream();
            // これを出力先とするObjectOutputStreamクラスを作ります。
            objectOutputStream = new ObjectOutputStream( byteArrayOutputStream );

            // 書き込むデータを作ります。
            SerializableData inputSerializableData = new SerializableData();
            inputSerializableData.setData( 100 );

            // データを書き込みます。
            // ここで渡すクラスは「Serializableインターフェイスの実装クラス」
            // である必要があります。
            objectOutputStream.writeObject( inputSerializableData );
            objectOutputStream.flush();

            // 書き込まれたバイトデータをbyte型配列として取得します。
            byte[] bytes = byteArrayOutputStream.toByteArray();

            // 参考用に、byte型配列の中身を出力します。
            for( int iF1 = 0; iF1 < bytes.length; ++iF1 )
            {
                System.out.print( Integer.toHexString( 0x000000FF & (int)bytes[iF1] ) + ", " );
            }
            System.out.println();
            // ac, ed, 0, 5, 73, 72, 0, 10, 53, 65, 72, 69, 61, 6c, 69, 7a, 61, 62, 6c, 65, 44, 61, 74, 61, 67, fc, 9e, 56, ef, ec, df, 21, 2, 0, 1, 49, 0, 4, 64, 61, 74, 61, 78, 70, 0, 0, 0, 64, 

            // それを読み込みます。
            // 入力元のByteArrayInputStreamクラスを作ります。
            byteArrayInputStream = new ByteArrayInputStream( bytes );
            // これを入力元とするDataOutputStreamクラスを作ります。
            objectInputStream = new ObjectInputStream( byteArrayInputStream );

            // データを取り出します。
            SerializableData outputSerializableData = (SerializableData)objectInputStream.readObject();
            System.out.println( outputSerializableData.getData() ); 
            // 100
        }
        catch( IOException e )
        {
            // 入出力に失敗した場合等に、このIOException例外が投げられます。
            e.printStackTrace();
        }
        catch( ClassNotFoundException e )
        {
            // ObjectInputStream#readObject()メソッドがthrows指定している
            // ClassNotFoundException例外を受け取ります。
            e.printStackTrace();
            return;
        }
        finally
        {
            // ストリームを扱ったら、最後にclose()メソッドを呼んで
            // 後処理をします。また、これは必ず行うため、
            // finally内で行います。
            try
            {
                if( objectInputStream != null )
                {
                    objectInputStream.close();
                }
            }
            catch( IOException e )
            {
                // close()メソッドはIOExceptionがthrows指定されているので
                // 一応受け取ります。
                e.printStackTrace();
            }

            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( objectOutputStream != null )
                {
                    objectOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( byteArrayOutputStream != null )
                {
                    byteArrayOutputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

/**
*   保存用データクラス。
*   Serializableインターフェイスの実装クラスです。
*/
class SerializableData implements Serializable
{
    /**
    *    privateなフィールド。
    */
    private int data;

    /**
    *    getter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    setter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/11/02
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。