logo

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_bytes' title=Prú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

AspektPrúd postávByte Stream
Spracovávaný typ údajov16-bitové znaky Unicode (text)8-bitové nespracované dáta (binárne)
Triedy končia oČitateľ / SpisovateľInputStream / OutputStream
Vhodné preTextové súbory s údajmi UnicodeObrázky audio a video binárne súbory
KonverziaAutomaticky prevádza bajty na znakyŽiadna konverzia nefunguje s nespracovanými bajtmi
PríkladyFileReader FileWriterFileInputStream FileOutputStream

Súvisiaci článok

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