El Classe PipedWriter en Java permet que dos fils es comuniquin entre ells passant dades per una canonada. Aquesta classe és útil quan volem que una part del programa enviï dades a una altra part sense emmagatzemar-les a la memòria.
Característiques de la classe PipedWriter:
- Permet escriure dades en una canonada.
- Utilitza una memòria intermèdia per emmagatzemar dades temporalment abans d'enviar-les al PipedReader.
- Funciona amb PipedReader per garantir una transferència segura de dades entre fils.
- Si la canonada es trenca, genera un error.
Declaració de PipedWriter a Java
La declaració de la classe PipedWriter és:
La classe pública PipedWriter amplia Writer
Totes les interfícies implementades:
derivada parcial en làtex
- Tancable: Aquesta interfície la fan servir les classes que gestionen recursos.
- Fluixable: Aquesta interfície s'utilitza per enviar les dades a la seva destinació.
- Apèndix: Aquesta interfície s'utilitza per afegir dades a un flux existent.
- Tancament automàtic: Aquesta interfície permet el tancament automàtic dels recursos.
Constructors a la classe PipedWriter
Aquesta classe consta de dos constructors amb l'ajuda dels quals podem crear objectes d'aquesta classe de diferents maneres. Els constructors disponibles en aquesta classe són els següents:
1. PipedWriter(): Aquest constructor s'utilitza per crear un PipedWriter que encara no està connectat a res.
Sintaxi:
PipedWriter()
Exemple:
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(); } } }
Sortida
Hello from PipedWriter!
2. PipedWriter (PipedReader inStream): Aquest constructor que ens solia crear un PipedWriter i el connecta a un PipedReader.
punter al c
Sintaxi:
PipedWriter (snk de PipedReader)
Exemple:
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(); } } }
Sortida
Hello PipedWriter
Mètodes Java PipedWriter
La imatge següent mostra els mètodes de la classe PipedWriter.

Ara parlarem de cada mètode un per un en detall:
1. escriure (int char): Aquest mètode s'utilitza per escriure un sol caràcter a una canonada.
Sintaxi:
public void write (int char)
cadena a nombre enter
- Paràmetre: Aquest mètode pren un paràmetre que representa el caràcter que s'ha d'escriure.
- Excepció: Aquest mètode retorna IOException si hi ha un problema amb l'operació d'E/S.
2. write(char[] carray int offset int maxlen): Aquest mètode s'utilitza per escriure caràcters d'una matriu a la canonada.
Sintaxi:
public void write(char[] carray int offset int maxlen)
- Paràmetre: Aquest mètode inclou tres paràmetres que s'enumeren a continuació:
- carray: És la matriu de caràcters que conté dades
- compensació: És la posició de la matriu on començar a escriure el formulari
- maxlen: És el nombre màxim de caràcters per escriure.
- Excepció: Aquest mètode retorna IOException si hi ha un problema amb l'operació d'E/S.
3. connectar (destinació de PipedReader): Aquest mètode s'utilitza per connectar el PipedWriter a un PipedReader.
Sintaxi:
connexió public void (destinació de PipedReader)
- Paràmetre: Aquest mètode pren un paràmetre de destinació, és el PipedReader al qual es connectarà el PipedWriter per a la transferència de dades.
- Excepció: Aquest mètode llança IOException si es produeix un error durant la connexió.
4. escàs(): Aquest mètode s'utilitza per netejar dades a la canonada.
Sintaxi:
int a cadena c++
buit public ()
closca de tornada
- Paràmetre: Aquest mètode no pren cap paràmetre.
- Excepció: Aquest mètode llança IOException si es produeix un error mentre es neteja les dades.
5. tancar(): Aquest mètode s'utilitza per tancar el PipedWriter.
Sinatx:
buit públic tancar()
- Paràmetre: Aquest mètode no pren cap paràmetre.
- Excepció: Aquest mètode llança IOException si hi ha un problema amb el tancament de l'escriptor.
Ara parlarem de com podem utilitzar la classe PipedWriter per escriure dades i llegir-les mitjançant un PipedReader connectat.
Exemple:
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(); } }
Sortida
Output from the pipe: J A V A
Programa Java que il·lustra el funcionament dels mètodes de classe PipedWriter
Ara escriurem alguns caràcters que esborraran la sortida i tanquem l'escriptor.
Exemple:
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(); } } }
Sortida
Output after flush(): G E E K S Closing the Writer streamCrea un qüestionari