Classe Java PipedWriter

Classe Java PipedWriter

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:

  • 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.

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.

Classe io.PipedWriter a Java


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)

  • 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:

buit public ()

  • 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 stream  
Crea un qüestionari