Clase Java PipedWriter
El Clase PipedWriter en Java permite que dos subprocesos se comuniquen entre sí pasando datos a través de una tubería. Esta clase es útil cuando queremos que una parte del programa envíe datos a otra parte sin almacenarlos en la memoria.
Características de la clase PipedWriter:
- Permite escribir datos en una tubería.
- Utiliza un búfer para almacenar datos temporalmente antes de enviarlos al PipedReader.
- Funciona con PipedReader para garantizar la transferencia segura de datos entre subprocesos.
- Si la tubería se rompe arroja un error.
Declaración de PipedWriter en Java
La Declaración de la clase PipedWriter es:
la clase pública PipedWriter extiende Writer
- Cerrable: Esta interfaz es utilizada por clases que manejan recursos.
- Desechable: Esta interfaz se utiliza para enviar datos a su destino.
- Anexo: Esta interfaz se utiliza para agregar datos a una secuencia existente.
- Cierre automático: Esta interfaz permite el cierre automático de recursos.
Constructores en la clase PipedWriter
Esta clase consta de dos constructores con la ayuda de los cuales podemos crear objetos de esta clase de diferentes maneras. Los siguientes son los constructores disponibles en esta clase:
1. PipedWriter(): Este constructor se utiliza para crear un PipedWriter que aún no está conectado a nada.
Sintaxis:
Escritor canalizado()
Ejemplo:
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 (); } } }
Producción
Hello from PipedWriter!
2. PipedWriter (PipedReader en corriente): Este constructor que utilizamos crea un PipedWriter y lo conecta a un PipedReader.
Sintaxis:
PipedWriter(PipedReader snk)
Ejemplo:
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 (); } } }
Producción
Hello PipedWriter
Métodos Java PipedWriter
La siguiente imagen muestra los métodos de la clase PipedWriter.
Ahora vamos a discutir cada método uno por uno en detalle:
1. escribir (int carácter): Este método se utiliza para escribir un solo carácter en una tubería.
Sintaxis:
escritura pública vacía (int char)
- Parámetro: Este método toma un parámetro que es char que representa el carácter que se va a escribir.
- Excepción: Este método devuelve IOException si hay un problema con la operación de E/S.
2. escribir(char[] carray int offset int maxlen): Este método se utiliza para escribir caracteres de una matriz en la tubería.
Sintaxis:
escritura vacía pública (char[] carray int offset int maxlen)
- Parámetro: Este método incluye tres parámetros que se enumeran a continuación:
- carray: Es la matriz de caracteres que contiene datos.
- compensar: Es la posición en la matriz donde comenzar a escribir el formulario.
- maxlen: Es el número máximo de caracteres a escribir.
- Excepción: Este método devuelve IOException si hay un problema con la operación de E/S.
3. conectar (destino de PipedReader): Este método se utiliza para conectar PipedWriter a PipedReader.
Sintaxis:
conexión pública vacía (destino de PipedReader)
- Parámetro: Este método toma un destino de parámetro: es el PipedReader al que se conectará PipedWriter para la transferencia de datos.
- Excepción: Este método genera IOException si se produce un error durante la conexión.
4. enjuague(): Este método se utiliza para vaciar datos en la tubería.
Sintaxis:
descarga de vacío público ()
- Parámetro: Este método no toma ningún parámetro.
- Excepción: Este método genera IOException si se produce un error al vaciar los datos.
5. cerrar(): Este método se utiliza para cerrar PipedWriter.
Sinatx:
cierre de vacío público()
- Parámetro: Este método no toma ningún parámetro.
- Excepción: Este método genera IOException si hay un problema al cerrar el escritor.
Ahora discutiremos cómo podemos usar la clase PipedWriter para escribir datos y leerlos a través de un PipedReader conectado.
Ejemplo:
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 (); } }
Producción
Output from the pipe: J A V A
Programa Java que ilustra el funcionamiento de los métodos de clase PipedWriter
Ahora escribiremos algunos caracteres, limpiaremos la salida y cerraremos el escritor.
Ejemplo:
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 (); } } }
Producción
Output after flush(): G E E K S Closing the Writer streamCrear cuestionario