Classe Java Piped Writer

Classe Java Piped Writer

O Classe PipedWriter em Java permite que dois threads se comuniquem entre si, passando dados por um canal. Esta classe é útil quando queremos que uma parte do programa envie dados para outra parte sem armazená-los na memória.

Recursos da classe PipedWriter:

  • Permite gravar dados em um pipe.
  • Ele usa um buffer para armazenar dados temporariamente antes de enviá-los ao PipedReader.
  • Funciona com PipedReader para garantir a transferência segura de dados entre threads.
  • Se o tubo quebrar, ocorrerá um erro.

Declaração de PipedWriter em Java

A declaração da classe PipedWriter é:

classe pública PipedWriter estende o Writer

Todas as interfaces implementadas:

  • Fechável: Essa interface é usada por classes que manipulam recursos.
  • Lavável: Esta interface é usada para liberar dados para seu destino.
  • Anexável: Esta interface é usada para anexar dados a um fluxo existente.
  • Fechamento automático: Esta interface permite o fechamento automático de recursos.

Construtores na classe PipedWriter

Esta classe consiste em dois construtores com os quais podemos criar objetos desta classe de diferentes maneiras. A seguir estão os construtores disponíveis nesta classe:

1. PipedWriter(): Este construtor é usado para criar um PipedWriter que ainda não está conectado a nada.

Sintaxe:

PipedWriter()

Exemplo:

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  ();      }      }   }   

Saída
Hello from PipedWriter! 


2. PipedWriter (PipedReader inStream): Este construtor usamos para criar um PipedWriter e conectá-lo a um PipedReader.

Sintaxe:

PipedWriter(PipedReader snk)

Exemplo:

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  ();      }      }   }   

Saída
Hello PipedWriter 


Métodos Java PipedWriter

A imagem abaixo demonstra os métodos da classe PipedWriter.

Classe io.PipedWriter em Java


Agora vamos discutir cada método, um por um, em detalhes:

1. escrever(int char): Este método é usado para gravar um único caractere em um canal.

Sintaxe:

escrita nula pública (int char)

  • Parâmetro: Este método usa um parâmetro que é ischar representando o caractere a ser escrito.
  • Exceção: Este método retorna IOException se houver um problema com a operação de E/S.


2. escrever (char[] carray int offset int maxlen): Este método é usado para escrever caracteres de um array no pipe.

Sintaxe:

escrita void pública (char[] carray int offset int maxlen)

  • Parâmetro: Este método inclui três parâmetros listados abaixo:
    • carro: É a matriz de caracteres que contém dados
    • desvio: É a posição no array onde começar a escrever o formulário
    • maxlen: É o número máximo de caracteres a serem escritos.
  • Exceção: Este método retorna IOException se houver um problema com a operação de E/S.


3. conectar (destino do PipeReader): Este método é usado para conectar o PipedWriter a um PipedReader.

Sintaxe:

conexão pública void (destino PipedReader)

  • Parâmetro: Este método leva um destino de parâmetro: é o PipedReader ao qual o PipedWriter se conectará para transferência de dados.
  • Exceção: Este método lança IOException se ocorrer um erro durante a conexão.


4. descarga(): Este método é usado para liberar dados no pipe.

Sintaxe:

liberação de vazio público()

  • Parâmetro: Este método não aceita nenhum parâmetro.
  • Exceção: Este método lança IOException se ocorrer um erro ao liberar os dados.


5. fechar(): Este método é usado para fechar o PipedWriter.

Sintaxe:

fechamento de vazio público()

  • Parâmetro: Este método não aceita nenhum parâmetro.
  • Exceção: Este método lança IOException se houver um problema ao fechar o gravador.


Agora discutiremos como podemos usar a classe PipedWriter para escrever dados e lê-los através de um PipedReader conectado

Exemplo:

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  ();         }      }   

Saída
Output from the pipe: J A V A 



Programa Java que ilustra o funcionamento dos métodos da classe PipedWriter

Agora vamos escrever alguns caracteres para liberar a saída e fechar o gravador.

Exemplo:

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  ();      }      }   }   

Saída
Output after flush(): G E E K S Closing the Writer stream  
Criar questionário