の JavaのPipedWriterクラス パイプを介してデータを渡すことにより、2 つのスレッドが相互に通信できるようになります。このクラスは、プログラムのある部分がデータをメモリに保存せずに別の部分に送信する場合に便利です。
PipedWriter クラスの機能:
- これにより、パイプにデータを書き込むことができます。
- PipedReader にデータを送信する前に、バッファを使用してデータを一時的に保存します。
- PipedReader と連携して、スレッド間の安全なデータ転送を保証します。
- パイプが壊れるとエラーがスローされます。
Java での PipedWriter の宣言
PipedWriter クラスの宣言は次のとおりです。
パブリッククラス PipedWriter は Writer を拡張します
実装されているすべてのインターフェイス:
- 開閉可能: このインターフェイスは、リソースを処理するクラスによって使用されます。
- 流せる: このインターフェイスは、データを宛先にフラッシュするために使用されます。
- 追加可能: このインターフェイスは、既存のストリームにデータを追加するために使用されます。
- 自動クローズ可能: このインターフェイスにより、リソースを自動的に閉じることができます。
PipedWriter クラスのコンストラクター
このクラスは 2 つのコンストラクターで構成されており、これらを使用すると、さまざまな方法でこのクラスのオブジェクトを作成できます。このクラスで使用できるコンストラクターは次のとおりです。
1.PipedWriter(): このコンストラクターは、まだ何にも接続されていない PipedWriter を作成するために使用されます。
構文:
PipedWriter()
bashは区切り文字で文字列を分割します
例:
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 クラスのメソッドを示しています。
Linuxでディレクトリ名を変更する

ここでは、各方法について 1 つずつ詳しく説明します。
1.書き込み(int char): このメソッドは、単一の文字をパイプに書き込むために使用されます。
構文:
public void write(int char)
- パラメータ: このメソッドは、書き込まれる文字を表す 1 つのパラメータを取ります。
- 例外: I/O 操作に問題がある場合、このメソッドは IOException を返します。
android.process.acore が停止し続ける
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 をスローします。
np.concatenate
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クイズの作成