Stream znakov vs. Byte Stream v Jave

Stream znakov vs. Byte Stream v Jave

Prúd je nepretržitý tok údajov. V Java sa I/O prúdy používajú na čítanie zo vstupných zdrojov alebo zápis do výstupných cieľov, ako sú súbory. Poskytujú spôsob sekvenčného prístupu k údajom. Balík java.io obsahuje triedy na spracovanie bajtových prúdov a prúdov znakov a tiež na konverziu medzi nimi.

  • Vstupný stream: načítava údaje zo zdroja. 
  • Výstupný tok: zapisuje údaje do cieľa. 

Kedy použiť tok znakov cez tok bajtov:

V jazyku Java sú znaky uložené pomocou konvencií Unicode. Znakový prúd je užitočný, keď chceme spracovať textové súbory. Tieto textové súbory je možné spracovať znak po znaku. Veľkosť znaku je zvyčajne 16 bitov.

Kedy použiť streamovanie bajtov cez stream znakov:

Bajtovo orientované číta bajt po bajte. Bytový prúd je vhodný na spracovanie nespracovaných údajov, ako sú binárne súbory.

Kľúčové body pri používaní a zaobchádzaní s ktorýmkoľvek z vyššie uvedených prúdov:

  • Triedy toku znakov zvyčajne končia na Reader/Writer, zatiaľ čo triedy bajtových tokov končia na InputStream/OutputStream.
  • Príklady kódov v tomto článku používajú toky bez vyrovnávacej pamäte, ktoré sú menej efektívne. Pre lepší výkon ich bežne zabalíme do BufferedReader/BufferedWriter (toky znakov) alebo BufferedInputStream/BufferedOutputStream (bajtové toky).
  • Po použití vždy zatvorte prúdy, aby ste uvoľnili zdroje a zabránili chybám.
  • Vyššie uvedené kódy nemusia bežať v online kompilátoroch, pretože súbory nemusia existovať.

Prúd postáv

V jazyku Java sú znaky uložené pomocou konvencií Unicode. Znakový prúd nám automaticky umožňuje čítať/zapisovať údaje znak po znaku. Napríklad FileReader a FileWriter sú toky znakov, ktoré sa používajú na čítanie zo zdroja a zápis do cieľa.

non_unicode_bytesPrúdy postáv

Príklad

Java
   import     java.io.*  ;   public     class   GFG     {      public     static     void     main  (  String  []     args  )      throws     IOException      {      // Initially assigning null as we have not read anything      FileReader     sourceStream     =     null  ;      try     {      // Reading from file      sourceStream     =     new     FileReader  (  '/Users/mayanksolanki/Desktop/demo.rtf'  );      // Reading sourcefile and writing content to target file character by character.      int     temp  ;      // If there is content inside file than read      while     ((  temp     =     sourceStream  .  read  ())     !=     -  1  )      System  .  out  .  println  ((  char  )  temp  );          System  .  out  .  print  (  'Program successfully executed'  );      }          finally     {      if     (  sourceStream     !=     null  )      sourceStream  .  close  ();      }      }   }   

výstup:

Zapisuje obsah do cieľového súboru znak po znaku

Program úspešne spustený

Byte Stream

Bytový tok v jazyku Java je tok, ktorý spracováva vstup a výstup nespracovaných 8-bitových binárnych údajov. Používa sa hlavne na čítanie a zápis netextových údajov, ako sú obrázky, audio video alebo akýkoľvek binárny súbor. Napríklad FileInputStream sa používa na čítanie zo zdroja a FileOutputStream na zápis do cieľa.

Príklad:

Java
   import     java.io.*  ;   public     class   GFG     {      public     static     void     main  (  String  []     args  )      throws     IOException      {      // Initially assigning null ot objects for reading and writing to file      FileInputStream     sourceStream     =     null  ;      FileOutputStream     targetStream     =     null  ;      try     {      // Passing the files via local directory      sourceStream     =     new     FileInputStream  (  '/Users/mayanksolanki/Desktop/demo.rtf'  );      targetStream     =     new     FileOutputStream  (  '/Users/mayanksolanki/Desktop/democopy.rtf'  );      // Reading source file and writing content to file byte by byte      int     temp  ;      // If there is content inside file than read      while     ((  temp     =     sourceStream  .  read  ())     !=     -  1  )      targetStream  .  write  ((  byte  )  temp  );          System  .  out  .  print  (  'Program successfully executed'  );      }      // finally block that executes for sure where we are closing file connections to avoid memory leakage      finally     {      if     (  sourceStream     !=     null  )      sourceStream  .  close  ();      if     (  targetStream     !=     null  )      targetStream  .  close  ();      }      }   }   

výstup:

Program úspešne spustený

Rozdiely medzi prúdom postáv a prúdom bajtov

Aspekt Prúd postáv Byte Stream
Spracovávaný typ údajov 16-bitové znaky Unicode (text) 8-bitové nespracované dáta (binárne)
Triedy končia o Čitateľ / Spisovateľ InputStream / OutputStream
Vhodné pre Textové súbory s údajmi Unicode Obrázky audio a video binárne súbory
Konverzia Automaticky prevádza bajty na znaky Žiadna konverzia nefunguje s nespracovanými bajtmi
Príklady FileReader FileWriter FileInputStream FileOutputStream

Súvisiaci článok

  • Java IO - Vstup/Výstup v jazyku Java s príkladmi