PipedReader
日本語 | 管化読者 |
英語 | piped reader |
ふりがな | ぱいぷとりーだー、ぱいぷどりーだー |
フリガナ | パイプトリーダー、パイプドリーダー |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.io.PipedReader。
ストリームクラス。Readerクラスのサブクラスであり、文字入力ストリームクラスである。
文字入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはPipedWriterクラスである。
PipedWriterクラスを「入力元」とするクラス。
PipedWriterクラスから送られた文字ストリームを受け取り取得する。
マルチスレッドの使用時に、あるスレッドから他のスレッドへ文字ストリームを送信する際に使用する。
PipedReaderクラスのコンストラクタにPipedWriterクラスを渡すことで、この2クラスが接続される。
PipedReaderクラスのread()メソッドを呼び出すと、read()メソッドは文字ストリームを受け取るまで待つ。
PipedWriterクラスからwrite()メソッドでint型の値を出力すると、PipedReaderクラスのread()メソッドから返り、その出力されたint型の値を返す。
PipedWriterクラスは処理が完了したらclose()メソッドを呼び出す。すると、PipedReaderクラスのread()メソッドは「-1」を返すため、ここで処理を終了し、PipedReaderクラスのclose()メソッドを呼び出す。
このように、PipedWriter→PipedReader、という送信処理を行うために使用する。
ストリームクラス。Readerクラスのサブクラスであり、文字入力ストリームクラスである。
文字入力ストリームクラスの中では「入力元」に位置する。
対になる出力側のクラスはPipedWriterクラスである。
PipedWriterクラスを「入力元」とするクラス。
PipedWriterクラスから送られた文字ストリームを受け取り取得する。
マルチスレッドの使用時に、あるスレッドから他のスレッドへ文字ストリームを送信する際に使用する。
PipedReaderクラスのコンストラクタにPipedWriterクラスを渡すことで、この2クラスが接続される。
PipedReaderクラスのread()メソッドを呼び出すと、read()メソッドは文字ストリームを受け取るまで待つ。
PipedWriterクラスからwrite()メソッドでint型の値を出力すると、PipedReaderクラスのread()メソッドから返り、その出力されたint型の値を返す。
PipedWriterクラスは処理が完了したらclose()メソッドを呼び出す。すると、PipedReaderクラスのread()メソッドは「-1」を返すため、ここで処理を終了し、PipedReaderクラスのclose()メソッドを呼び出す。
このように、PipedWriter→PipedReader、という送信処理を行うために使用する。
// 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();
}
}
}
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();
}
}
}
// 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(); } } }