Клас Java PipedWriter
The Клас PipedWriter у Java дозволяє двом потокам спілкуватися один з одним, передаючи дані через канал. Цей клас корисний, коли ми хочемо, щоб одна частина програми надсилала дані іншій частині, не зберігаючи їх у пам’яті.
Особливості класу PipedWriter:
- Це дозволяє записувати дані в канал.
- Він використовує буфер для тимчасового зберігання даних перед надсиланням їх у PipedReader.
- Він працює з PipedReader, щоб забезпечити безпечну передачу даних між потоками.
- Якщо труба ламається, це видає помилку.
Оголошення PipedWriter у Java
Оголошення класу PipedWriter таке:
публічний клас PipedWriter розширює Writer
Усі реалізовані інтерфейси:
- Закривається: Цей інтерфейс використовується класами, які обробляють ресурси.
- Змивний: Цей інтерфейс використовується для передачі даних до місця призначення.
- Додається: Цей інтерфейс використовується для додавання даних до існуючого потоку.
- Автозакривається: Цей інтерфейс дозволяє автоматично закривати ресурси.
Конструктори в класі PipedWriter
Цей клас складається з двох конструкторів, за допомогою яких ми можемо створювати об’єкти цього класу різними способами. У цьому класі доступні такі конструктори:
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. запис (int char): Цей метод використовується для запису одного символу в канал.
Синтаксис:
public void write(int char)
- Параметр: Цей метод приймає один параметр, який ischar представляє символ, який буде написаний.
- Виняток: Цей метод повертає IOException, якщо є проблема з операцією введення-виведення.
2. write(char[] carray int offset int maxlen): Цей метод використовується для запису символів з масиву в канал.
Синтаксис:
public void write(char[] carray int offset int maxlen)
- Параметр: Цей метод включає три параметри, які перераховані нижче:
- Керрей: Це масив символів, який містить дані
- зсув: Це позиція в масиві, з якої починається запис форми
- Макслен: Це максимальна кількість символів для запису.
- Виняток: Цей метод повертає IOException, якщо є проблема з операцією введення-виведення.
3. підключення (призначення PipedReader): Цей метод використовується для підключення PipedWriter до PipedReader.
Синтаксис:
public void connect (призначення PipedReader)
- Параметр: Цей метод приймає один параметр призначення, це PipedReader, до якого PipedWriter підключатиметься для передачі даних.
- Виняток: Цей метод створює IOException, якщо під час підключення виникає помилка.
4. flush(): Цей метод використовується для очищення даних у каналі.
Синтаксис:
public void flush()
- Параметр: Цей метод не приймає жодних параметрів.
- Виняток: Цей метод створює IOException, якщо під час очищення даних виникає помилка.
5. close(): Цей метод використовується для закриття PipedWriter.
Synatx:
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
Програма 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Створіть вікторину