Klasa Java PipedWriter

Klasa Java PipedWriter

The Klasa PipedWriter w Javie umożliwia dwóm wątkom komunikowanie się ze sobą poprzez przesyłanie danych przez potok. Klasa ta jest przydatna, gdy chcemy, aby jedna część programu wysyłała dane do innej części bez przechowywania ich w pamięci.

Funkcje klasy PipedWriter:

  • Umożliwia zapis danych do potoku.
  • Używa bufora do tymczasowego przechowywania danych przed wysłaniem ich do PipedReader.
  • Współpracuje z PipedReaderem, aby zapewnić bezpieczny transfer danych pomiędzy wątkami.
  • Jeśli rura pęknie, zgłasza błąd.

Deklaracja PipedWriter w Javie

Deklaracja klasy PipedWriter to:

klasa publiczna PipedWriter rozszerza Writer

Wszystkie zaimplementowane interfejsy:

  • Zamykane: Interfejs ten jest używany przez klasy obsługujące zasoby.
  • Możliwość spłukiwania: Interfejs ten służy do przesyłania danych do miejsca docelowego.
  • Możliwość dołączenia: Ten interfejs służy do dołączania danych do istniejącego strumienia.
  • Automatyczne zamykanie: Interfejs ten umożliwia automatyczne zamykanie zasobów.

Konstruktory w klasie PipedWriter

Klasa ta składa się z dwóch konstruktorów za pomocą których możemy tworzyć obiekty tej klasy na różne sposoby. Poniżej znajdują się konstruktory dostępne w tej klasie:

1. PipedWriter(): Ten konstruktor służy do tworzenia PipedWriter, który nie jest jeszcze z niczym połączony.

Składnia:

PipedWriter()

Przykład:

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

Wyjście
Hello from PipedWriter! 


2. PipedWriter (PipedReader inStream): Ten konstruktor, którego użyliśmy do utworzenia PipedWriter i połączenia go z PipedReader.

Składnia:

PipedWriter (PipedReader snk)

Przykład:

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

Wyjście
Hello PipedWriter 


Metody Java PipedWriter

Poniższy obrazek ilustruje metody klasy PipedWriter.

Klasa io.PipedWriter w Javie


Teraz omówimy szczegółowo każdą metodę:

1. napisz(int char): Ta metoda służy do zapisywania pojedynczego znaku w potoku.

Składnia:

publiczny pusty zapis (int char)

  • Parametr: Ta metoda przyjmuje jeden parametr, który ischar reprezentuje znak, który ma zostać zapisany.
  • Wyjątek: Ta metoda zwraca wyjątek IOException, jeśli występuje problem z operacją we/wy.


2. write(char[] carray int offset int maxlen): Ta metoda służy do zapisywania znaków z tablicy do potoku.

Składnia:

public void write(char[] carray int offset int maxlen)

  • Parametr: Metoda ta obejmuje trzy parametry wymienione poniżej:
    • nieść: Jest to tablica znaków zawierająca dane
    • zrównoważyć: Jest to pozycja w tablicy, od której należy rozpocząć pisanie formularza
    • Maxlen: Jest to maksymalna liczba znaków do zapisania.
  • Wyjątek: Ta metoda zwraca wyjątek IOException, jeśli występuje problem z operacją we/wy.


3. połącz (miejsce docelowe PipedReader): Ta metoda służy do łączenia PipedWriter z PipedReader.

Składnia:

publiczne połączenie o nieważność (miejsce docelowe PipedReader)

  • Parametr: Ta metoda przyjmuje jedno miejsce docelowe parametru, jest to PipedReader, z którym PipedWriter połączy się w celu przesłania danych.
  • Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli podczas łączenia wystąpi błąd.


4. spłucz(): Ta metoda służy do opróżniania danych w potoku.

Składnia:

publiczne puste opróżnianie()

  • Parametr: Ta metoda nie przyjmuje żadnych parametrów.
  • Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli podczas opróżniania danych wystąpi błąd.


5. zamknij(): Ta metoda służy do zamykania PipedWriter.

Składnia:

publiczna pustka zamknij()

  • Parametr: Ta metoda nie przyjmuje żadnych parametrów.
  • Wyjątek: Ta metoda zgłasza wyjątek IOException, jeśli występuje problem z zamknięciem modułu zapisującego.


Teraz omówimy, w jaki sposób możemy użyć klasy PipedWriter do zapisu danych i odczytania ich przez podłączony PipedReader

Przykład:

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

Wyjście
Output from the pipe: J A V A 



Program Java ilustrujący działanie metod klasy PipedWriter

Teraz napiszemy kilka znaków, opróżniając dane wyjściowe i zamykając moduł zapisujący.

Przykład:

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

Wyjście
Output after flush(): G E E K S Closing the Writer stream  
Utwórz quiz