JavaA2Z

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

PipedWriter

日本語 管化書記
英語 piped writer
ふりがな ぱいぷとらいたー、ぱいぷどらいたー
フリガナ パイプトライター、パイプドライター

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.io.PipedWriter。
ストリームクラスWriterクラスサブクラスであり、文字出力ストリームクラスである。
文字出力ストリームクラスの中では「出力先」に位置する。
対になる入力側のクラスPipedReaderクラスである。
 
PipedReaderクラスを「出力先」とするクラス
PipedReaderクラスへと文字ストリームを送信するために使用する。
マルチスレッドの使用時に、あるスレッドから他のスレッド文字ストリームを送信する際に使用する。
 
PipedReaderクラスコンストラクタにPipedWriterクラスを渡すことで、この2クラスが接続される。
PipedReaderクラスのread()メソッド呼び出すと、read()メソッドストリームを受け取るまで待つ。
PipedWriterクラスからwrite()メソッドintの値を出力すると、PipedReaderクラスのread()メソッドから返り、その出力されたintの値を返す。
PipedWriterクラスは処理が完了したらclose()メソッド呼び出す。すると、PipedReaderクラスのread()メソッドは「-1」を返すため、ここで処理を終了し、PipedReaderクラスclose()メソッド呼び出す
このように、PipedWriter→PipedReader、という送信処理をうために使用する。

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

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

// Sample.java
import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        PipedWriter pipedWriter = null;
        PipedReader pipedReader = null;
        try
        {
            // PipedWriterクラスとPipedReaderクラスを作り、
            // 片方をもう片方のコンストラクタに渡して接続します。
            pipedWriter = new PipedWriter();
            pipedReader = new PipedReader( pipedWriter );

            // 入力側は別スレッドで実行します。
            InputThread inputThread = new InputThread( pipedReader );
            inputThread.start();

            // こちら、出力側。
            // 出力用データを用意します。
            char[] chars = new char[]{ 'あ''い''う''え''お' };

            // 一文字ずつ出力します。
            forint iF1 = 0; iF1 < chars.length; ++iF1 )
            {
                // こちらからcharsの文字を出力します。
                pipedWriter.write( chars[iF1] );

                try
                {
                    // このスレッドを1秒止めます。
                    Thread.sleep( 1 * 1000 );
                }
                catch( InterruptedException e )
                {
                    // sleep()メソッドを呼んでいる間に割り込みが入ると
                    // InterruptedException例外が投げられます。
                    e.printStackTrace();
                }
            }

            System.out.println( "main() : 終了します。" );
            // 0x0 ( 0 )
            // 0x1 ( 1 )
            // 0x2 ( 2 )
            // 0x3 ( 3 )
            // 0x4 ( 4 )
            // 0x5 ( 5 )
            // 0x6 ( 6 )
            // 0x7 ( 7 )
            // 0x8 ( 8 )
            // 0x9 ( 9 )
            // main() : 終了します。
            // InputThread : 終了します。

            // このように、PipedWriterクラスから書き込んだ
            // バイト情報が、PipedReaderクラスで取得できる
            // というわけです。
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( pipedReader != null )
                {
                    pipedReader.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

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

/**
*   入力側。
*/
class InputThread extends Thread
{
    /** 入力用PipedReaderクラス */
    private PipedReader pipedReader;

    /**
    *   コンストラクタ。
    */
    public InputThread( PipedReader pipedReader )
    {
        this.pipedReader = pipedReader;
    }
    
    /**
    *   読み取り処理を開始します。
    *   別スレッドで実行されます。
    */
    public void run()
    {
        // こちら、入力側。
        try
        {
            while( true )
            {
                // 1バイト取得します。
                int i = pipedReader.read();
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 出力します。
                System.out.println( (char)i );
            }

            System.out.println( "InputThread : 終了します。" );
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
    }
}
// Sample.java
import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.IOException;

public class Sample
{
    public static void main( String[] args )
    {
        PipedWriter pipedWriter = null;
        PipedReader pipedReader = null;
        try
        {
            // PipedWriterクラスとPipedReaderクラスを作り、
            // 片方をもう片方のコンストラクタに渡して接続します。
            pipedWriter = new PipedWriter();
            pipedReader = new PipedReader( pipedWriter );

            // 入力側は別スレッドで実行します。
            InputThread inputThread = new InputThread( pipedReader );
            inputThread.start();

            // こちら、出力側。
            // 出力用データを用意します。
            char[] chars = new char[]{ 'あ', 'い', 'う', 'え', 'お' };

            // 一文字ずつ出力します。
            for( int iF1 = 0; iF1 < chars.length; ++iF1 )
            {
                // こちらからcharsの文字を出力します。
                pipedWriter.write( chars[iF1] );

                try
                {
                    // このスレッドを1秒止めます。
                    Thread.sleep( 1 * 1000 );
                }
                catch( InterruptedException e )
                {
                    // sleep()メソッドを呼んでいる間に割り込みが入ると
                    // InterruptedException例外が投げられます。
                    e.printStackTrace();
                }
            }

            System.out.println( "main() : 終了します。" );
            // 0x0 ( 0 )
            // 0x1 ( 1 )
            // 0x2 ( 2 )
            // 0x3 ( 3 )
            // 0x4 ( 4 )
            // 0x5 ( 5 )
            // 0x6 ( 6 )
            // 0x7 ( 7 )
            // 0x8 ( 8 )
            // 0x9 ( 9 )
            // main() : 終了します。
            // InputThread : 終了します。

            // このように、PipedWriterクラスから書き込んだ
            // バイト情報が、PipedReaderクラスで取得できる
            // というわけです。
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( pipedReader != null )
                {
                    pipedReader.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

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

/**
*   入力側。
*/
class InputThread extends Thread
{
    /** 入力用PipedReaderクラス */
    private PipedReader pipedReader;

    /**
    *   コンストラクタ。
    */
    public InputThread( PipedReader pipedReader )
    {
        this.pipedReader = pipedReader;
    }
    
    /**
    *   読み取り処理を開始します。
    *   別スレッドで実行されます。
    */
    public void run()
    {
        // こちら、入力側。
        try
        {
            while( true )
            {
                // 1バイト取得します。
                int i = pipedReader.read();
                if( i == -1 )
                {
                    // -1が返されてきたら終わりです。
                    break;
                }

                // 出力します。
                System.out.println( (char)i );
            }

            System.out.println( "InputThread : 終了します。" );
        }
        catch( IOException e )
        {
            // 出力時に問題があったらIOException例外が投げられます。
            e.printStackTrace();
        }
    }
}

この単語を含むページ

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

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

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