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): Този метод се използва за запис на един символ в канал.
Синтаксис:
публичен невалиден запис (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.
Синтаксис:
публично празно свързване (дестинация PipedReader)
- Параметър: Този метод приема дестинация на един параметър, това е PipedReader, към който PipedWriter ще се свърже за пренос на данни.
- Изключение: Този метод хвърля IOException, ако възникне грешка при свързване.
4. флъш(): Този метод се използва за изчистване на данни в канала.
Синтаксис:
публичен void flush()
- Параметър: Този метод не приема никакъв параметър.
- Изключение: Този метод хвърля IOException, ако възникне грешка при изчистване на данните.
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Създаване на тест