Java PipedWriter クラス
の JavaのPipedWriterクラス パイプを介してデータを渡すことにより、2 つのスレッドが相互に通信できるようになります。このクラスは、プログラムのある部分がデータをメモリに保存せずに別の部分に送信する場合に便利です。
PipedWriter クラスの機能:
- これにより、パイプにデータを書き込むことができます。
- PipedReader にデータを送信する前に、バッファを使用してデータを一時的に保存します。
- PipedReader と連携して、スレッド間の安全なデータ転送を保証します。
- パイプが壊れるとエラーがスローされます。
Java での PipedWriter の宣言
PipedWriter クラスの宣言は次のとおりです。
パブリッククラス PipedWriter は Writer を拡張します
実装されているすべてのインターフェイス:
- 開閉可能: このインターフェイスは、リソースを処理するクラスによって使用されます。
- 流せる: このインターフェイスは、データを宛先にフラッシュするために使用されます。
- 追加可能: このインターフェイスは、既存のストリームにデータを追加するために使用されます。
- 自動クローズ可能: このインターフェイスにより、リソースを自動的に閉じることができます。
PipedWriter クラスのコンストラクター
このクラスは 2 つのコンストラクターで構成されており、これらを使用すると、さまざまな方法でこのクラスのオブジェクトを作成できます。このクラスで使用できるコンストラクターは次のとおりです。
1.PipedWriter(): このコンストラクターは、まだ何にも接続されていない PipedWriter を作成するために使用されます。
構文:
PipedWriter()
例:
Java // Demonstrating the working // of PipedWriter() import java.io.* ; class Geeks { public static void main ( String [] args ) { // Create PipedWriter and PipedReader PipedWriter w = new PipedWriter (); PipedReader r = new PipedReader (); try { // Connect the PipedWriter to the PipedReader w . connect ( r ); // Create a thread to write data into the pipe Thread writerThread = new Thread ( new Runnable () { public void run () { try { w . write ( 'Hello from PipedWriter!' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } } }); // Create a thread to read data from the pipe Thread readerThread = new Thread ( new Runnable () { public void run () { try { int data ; while (( data = r . read ()) != - 1 ) { System . out . print (( char ) data ); } r . close (); } catch ( IOException e ) { e . printStackTrace (); } } }); // Start both threads writerThread . start (); readerThread . start (); // Wait for both threads to finish writerThread . join (); readerThread . join (); } catch ( IOException | InterruptedException e ) { e . printStackTrace (); } } }
出力
Hello from PipedWriter!
2. PipedWriter(PipedReader inStream): このコンストラクターは、PipedWriter を作成し、PipedReader に接続するために使用します。
構文:
PipedWriter(PipedReader SNK)
例:
Java // Demonstrating the working // PipedWriter(PipedReader snk) import java.io.* ; public class Geeks { public static void main ( String [] args ) { try { // Create a PipedReader and a PipedWriter PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter ( r ); // Create a thread to write data to the PipedWriter Thread writerThread = new Thread (() -> { try { w . write ( 'Hello PipedWriter' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } }); // Create a thread to read data from the PipedReader Thread readerThread = new Thread (() -> { try { int data ; while (( data = r . read ()) != - 1 ) { System . out . print (( char ) data ); } } catch ( IOException e ) { e . printStackTrace (); } }); // Start both threads writerThread . start (); readerThread . start (); // Wait for both threads to finish writerThread . join (); readerThread . join (); } catch ( IOException | InterruptedException e ) { e . printStackTrace (); } } }
出力
Hello PipedWriter
Java PipedWriter メソッド
以下の図は、PipedWriter クラスのメソッドを示しています。
ここでは、各方法について 1 つずつ詳しく説明します。
1.書き込み(int char): このメソッドは、単一の文字をパイプに書き込むために使用されます。
構文:
public void write(int char)
- パラメータ: このメソッドは、書き込まれる文字を表す 1 つのパラメータを取ります。
- 例外: I/O 操作に問題がある場合、このメソッドは IOException を返します。
2. write(char[] carray int offset int maxlen): このメソッドは、配列からパイプに文字を書き込むために使用されます。
構文:
public void write(char[] carray int offset int maxlen)
- パラメータ: このメソッドには、以下に示す 3 つのパラメーターが含まれています。
- キャリー: データを含む文字配列です
- オフセット: フォームの書き込みを開始する配列内の位置です。
- マックスレン: 書き込める最大文字数です。
- 例外: I/O 操作に問題がある場合、このメソッドは IOException を返します。
3. 接続 (PipedReader の宛先): このメソッドは、PipedWriter を PipedReader に接続するために使用されます。
構文:
public void connect(PipedReader 宛先)
- パラメータ: このメソッドは、PipedWriter がデータ転送のために接続する PipedReader である宛先パラメーターを 1 つ受け取ります。
- 例外: 接続中にエラーが発生した場合、このメソッドは IOException をスローします。
4.flush(): このメソッドは、パイプ内のデータをフラッシュするために使用されます。
構文:
パブリックボイドフラッシュ()
- パラメータ: このメソッドはパラメータを取りません。
- 例外: データのフラッシュ中にエラーが発生した場合、このメソッドは IOException をスローします。
5.close(): このメソッドは、PipedWriter を閉じるために使用されます。
シナックス:
public void close()
- パラメータ: このメソッドはパラメータを取りません。
- 例外: ライターを閉じる際に問題がある場合、このメソッドは IOException をスローします。
次に、PipedWriter クラスを使用してデータを書き込み、接続された PipedReader を通じてそれを読み取る方法について説明します。
例:
Java // Demonstrating how to use PipedReader // and PipedWriter to transferr an array // of characters between two threads import java.io.* ; public class Geeks { public static void main ( String [] args ) throws IOException { PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter (); r . connect ( w ); // Must connect before use // Writing a char array char [] c = { 'J' 'A' 'V' 'A' }; w . write ( c 0 4 ); // Reading blocks if no data is written yet System . out . print ( 'Output from the pipe:' ); for ( int i = 0 ; i < 4 ; i ++ ) { System . out . print ( ' ' + ( char ) r . read ()); } w . close (); r . close (); } }
出力
Output from the pipe: J A V A
PipedWriter クラスのメソッドの動作を示す Java プログラム
次に、いくつかの文字を書いて出力をフラッシュし、ライターを閉じます。
例:
Java // Java program illustrating the working of PipedWriter // write() connect // close() flush() import java.io.* ; public class Geeks { public static void main ( String [] args ) throws IOException { PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter (); try { // Use of connect(): Connecting the writer to the reader r . connect ( w ); // Use of write(int byte): Writing characters to the pipe w . write ( 71 ); w . write ( 69 ); w . write ( 69 ); w . write ( 75 ); w . write ( 83 ); // Use of flush() method: Flushing the output to // make sure all data is written w . flush (); System . out . println ( 'Output after flush():' ); // Reading from the pipe for ( int i = 0 ; i < 5 ; i ++ ) { System . out . print ( ' ' + ( char ) r . read ()); } // Use of close() method: Closing the writer System . out . println ( 'nClosing the Writer stream' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } } }
出力
Output after flush(): G E E K S Closing the Writer streamクイズの作成