The Клас PipedWriter в Java позволява на две нишки да комуникират една с друга чрез предаване на данни през канал. Този клас е полезен, когато искаме една част от програмата да изпраща данни към друга част, без да ги съхранява в паметта.
Характеристики на класа PipedWriter:
- Позволява запис на данни в тръба.
- Той използва буфер за временно съхраняване на данни, преди да ги изпрати до PipedReader.
- Работи с PipedReader, за да осигури безопасен трансфер на данни между нишки.
- Ако тръбата се счупи, извежда грешка.
Декларация на PipedWriter в Java
Декларацията на класа PipedWriter е:
публичен клас PipedWriter разширява Writer
Всички внедрени интерфейси:
- Затваряне: Този интерфейс се използва от класове, които обработват ресурси.
- Промиваем: Този интерфейс се използва за изхвърляне на данни до местоназначението им.
- Допълнително: Този интерфейс се използва за добавяне на данни към съществуващ поток.
- Автоматично затваряне: Този интерфейс позволява автоматично затваряне на ресурси.
Конструктори в клас PipedWriter
Този клас се състои от два конструктора, с помощта на които можем да създаваме обекти от този клас по различни начини. Следните са наличните конструктори в този клас:
1. PipedWriter(): Този конструктор се използва за създаване на PipedWriter, който все още не е свързан с нищо.
Синтаксис:
PipedWriter()
полиморфизъм в java
Пример:
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. запис (int char): Този метод се използва за запис на един символ в канал.
Синтаксис:
публичен невалиден запис (int char)
- Параметър: Този метод приема един параметър, който ischar представлява символа, който ще бъде написан.
- Изключение: Този метод връща IOException, ако има проблем с I/O операцията.
2. write(char[] carray int offset int maxlen): Този метод се използва за запис на знаци от масив в канала.
Синтаксис:
public void write(char[] carray int offset int maxlen)
- Параметър: Този метод включва три параметъра, които са изброени по-долу:
- керей: Това е масивът от знаци, който съдържа данни
- офсет: Това е позицията в масива, откъдето да започнете да пишете формата
- макслен: Това е максималният брой знаци за писане.
- Изключение: Този метод връща IOException, ако има проблем с I/O операцията.
3. свързване (дестинация на PipedReader): Този метод се използва за свързване на PipedWriter към PipedReader.
Синтаксис:
низ заменя всички java
публично празно свързване (дестинация PipedReader)
- Параметър: Този метод приема дестинация на един параметър, това е PipedReader, към който PipedWriter ще се свърже за пренос на данни.
- Изключение: Този метод хвърля IOException, ако възникне грешка при свързване.
4. флъш(): Този метод се използва за изчистване на данни в канала.
Синтаксис:
публичен void flush()
- Параметър: Този метод не приема никакъв параметър.
- Изключение: Този метод хвърля IOException, ако възникне грешка при изчистване на данните.
java обратен низ
5. затвори (): Този метод се използва за затваряне на PipedWriter.
Synatx:
публично невалидно затваряне()
- Параметър: Този метод не приема никакъв параметър.
- Изключение: Този метод хвърля 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
Java програма, илюстрираща работата на методите на клас PipedWriter
Сега ще напишем няколко символа, ще изчистим изхода и ще затворим писателя.
Пример:
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Създаване на тест