logo

Proud postav vs. Byte Stream v Javě

Proud je nepřetržitý tok dat. V Javě se I/O proudy používají ke čtení ze vstupních zdrojů nebo k zápisu do výstupních cílů, jako jsou soubory. Poskytují způsob, jak přistupovat k datům postupně. Balíček java.io obsahuje třídy pro zpracování bajtových i znakových proudů a také pro převod mezi nimi.

  • Vstupní stream: čte data ze zdroje. 
  • Výstupní proud: zapisuje data do cíle. 

Kdy použít znakový stream přes bytový proud:

V jazyce Java jsou znaky uloženy pomocí konvencí Unicode. Znakový proud je užitečný, když chceme zpracovávat textové soubory. Tyto textové soubory lze zpracovat znak po znaku. Velikost znaku je obvykle 16 bitů.



Kdy použít Stream bajtů přes Stream znaků:

Bajtově orientované čtení byte po byte. Bytový proud je vhodný pro zpracování nezpracovaných dat, jako jsou binární soubory.

Klíčové body při používání a zacházení s kterýmkoli z výše uvedených streamů:

  • Třídy toku znaků obvykle končí na Reader/Writer, zatímco třídy byte stream končí na InputStream/OutputStream.
  • Příklady kódů v tomto článku používají streamy bez vyrovnávací paměti, které jsou méně efektivní. Pro lepší výkon je běžně zabalíme do BufferedReader/BufferedWriter (toky znaků) nebo BufferedInputStream/BufferedOutputStream (byte streamy).
  • Po použití vždy zavřete proudy, abyste uvolnili zdroje a předešli chybám.
  • Výše uvedené kódy nemusí běžet v online kompilátorech, protože soubory nemusí existovat.

Proud postav

V jazyce Java jsou znaky uloženy pomocí konvencí Unicode. Znakový proud nám automaticky umožňuje číst/zapisovat data znak po znaku. Například FileReader a FileWriter jsou znakové proudy používané ke čtení ze zdroje a zápisu do cíle.

non_unicode_bytes' title=Proudy postav

Pří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:

Zapíše obsah do cílového souboru znak po znaku

Program úspěšně spuštěn

Byte Stream

Bytový proud v Javě je proud, který zpracovává vstup a výstup nezpracovaných 8bitových binárních dat. Používá se hlavně pro čtení a zápis netextových dat, jako jsou obrázky, audio video nebo jakýkoli binární soubor. Například FileInputStream se používá ke čtení ze zdroje a FileOutputStream k zápisu do cíle.

Pří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 úspěšně spuštěn

Rozdíly mezi tokem postav a tokem bajtů

AspektProud postavByte Stream
Zpracovávaný typ dat16bitové znaky Unicode (text)8bitová nezpracovaná data (binární)
Třídy končí sČtenář / SpisovatelInputStream / OutputStream
Vhodné proTextové soubory Unicode dataObrázky audio a video binární soubory
KonverzeAutomaticky převede bajty na znakyŽádná konverze nefunguje s nezpracovanými bajty
PříkladyFileReader FileWriterFileInputStream FileOutputStream

Související článek

  • Java IO - vstup/výstup v Javě s příklady