The Klasa PipedWriter w Javie umożliwia dwóm wątkom komunikowanie się ze sobą poprzez przesyłanie danych przez potok. Klasa ta jest przydatna, gdy chcemy, aby jedna część programu wysyłała dane do innej części bez przechowywania ich w pamięci.
Funkcje klasy PipedWriter:
- Umożliwia zapis danych do potoku.
- Używa bufora do tymczasowego przechowywania danych przed wysłaniem ich do PipedReader.
- Współpracuje z PipedReaderem, aby zapewnić bezpieczny transfer danych pomiędzy wątkami.
- Jeśli rura pęknie, zgłasza błąd.
Deklaracja PipedWriter w Javie
Deklaracja klasy PipedWriter to:
klasa publiczna PipedWriter rozszerza Writer
Wszystkie zaimplementowane interfejsy:
- Zamykane: Interfejs ten jest używany przez klasy obsługujące zasoby.
- Możliwość spłukiwania: Interfejs ten służy do przesyłania danych do miejsca docelowego.
- Możliwość dołączenia: Ten interfejs służy do dołączania danych do istniejącego strumienia.
- Automatyczne zamykanie: Interfejs ten umożliwia automatyczne zamykanie zasobów.
Konstruktory w klasie PipedWriter
Klasa ta składa się z dwóch konstruktorów za pomocą których możemy tworzyć obiekty tej klasy na różne sposoby. Poniżej znajdują się konstruktory dostępne w tej klasie:
1. PipedWriter(): Ten konstruktor służy do tworzenia PipedWriter, który nie jest jeszcze z niczym połączony.
Składnia:
PipedWriter()
Przykład:
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(); } } }
Wyjście
Hello from PipedWriter!
2. PipedWriter (PipedReader inStream): Ten konstruktor, którego użyliśmy do utworzenia PipedWriter i połączenia go z PipedReader.
Składnia:
PipedWriter (PipedReader snk)
Przykład:
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(); } } }
Wyjście
Hello PipedWriter
Metody Java PipedWriter
Poniższy obrazek ilustruje metody klasy PipedWriter.
komputer wynalazł, w którym roku

Teraz omówimy szczegółowo każdą metodę:
1. napisz(int char): Ta metoda służy do zapisywania pojedynczego znaku w potoku.
Składnia:
publiczny pusty zapis (int char)
- Parametr: Ta metoda przyjmuje jeden parametr, który ischar reprezentuje znak, który ma zostać zapisany.
- Wyjątek: Ta metoda zwraca wyjątek IOException, jeśli występuje problem z operacją we/wy.
2. write(char[] carray int offset int maxlen): Ta metoda służy do zapisywania znaków z tablicy do potoku.
Składnia:
public void write(char[] carray int offset int maxlen)
- Parametr: Metoda ta obejmuje trzy parametry wymienione poniżej:
- nieść: Jest to tablica znaków zawierająca dane
- zrównoważyć: Jest to pozycja w tablicy, od której należy rozpocząć pisanie formularza
- Maxlen: Jest to maksymalna liczba znaków do zapisania.
- Wyjątek: Ta metoda zwraca wyjątek IOException, jeśli występuje problem z operacją we/wy.
3. połącz (miejsce docelowe PipedReader): Ta metoda służy do łączenia PipedWriter z PipedReader.
Składnia:
publiczne połączenie o nieważność (miejsce docelowe PipedReader)
- Parametr: Ta metoda przyjmuje jedno miejsce docelowe parametru, jest to PipedReader, z którym PipedWriter połączy się w celu przesłania danych.
- Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli podczas łączenia wystąpi błąd.
4. spłucz(): Ta metoda służy do opróżniania danych w potoku.
Składnia:
publiczne puste opróżnianie()
- Parametr: Ta metoda nie przyjmuje żadnych parametrów.
- Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli podczas opróżniania danych wystąpi błąd.
program tablicowy dwuwymiarowy w c
5. zamknij(): Ta metoda służy do zamykania PipedWriter.
Składnia:
publiczna pustka zamknij()
- Parametr: Ta metoda nie przyjmuje żadnych parametrów.
- Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli występuje problem z zamknięciem modułu zapisującego.
Teraz omówimy, w jaki sposób możemy użyć klasy PipedWriter do zapisu danych i odczytania ich przez podłączony PipedReader
Przykład:
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(); } }
Wyjście
Output from the pipe: J A V A
Program Java ilustrujący działanie metod klasy PipedWriter
Teraz napiszemy kilka znaków, opróżniając dane wyjściowe i zamykając moduł zapisujący.
Przykład:
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(); } } }
Wyjście
Output after flush(): G E E K S Closing the Writer streamUtwórz quiz