Simbolių srautas vs baitų srautas Java

Simbolių srautas vs baitų srautas Java

Srautas yra nenutrūkstamas duomenų srautas. Java I/O srautai naudojami nuskaityti iš įvesties šaltinių arba rašyti į išvesties paskirties vietas, pvz., failus. Jie suteikia galimybę nuosekliai pasiekti duomenis. „Java.io“ pakete yra klasės, skirtos baitų srautams ir simbolių srautams tvarkyti, taip pat konvertuoti tarp jų.

  • Įvesties srautas: nuskaito duomenis iš šaltinio. 
  • Išvesties srautas: įrašo duomenis į paskirties vietą. 

Kada naudoti simbolių srautą per baitų srautą:

Java simboliai saugomi naudojant Unicode konvencijas. Simbolių srautas yra naudingas, kai norime apdoroti tekstinius failus. Šiuos tekstinius failus galima apdoroti po simbolio. Simbolių dydis paprastai yra 16 bitų.

Kada naudoti baitų srautą per simbolių srautą:

Pagal baitą skaitoma baitas po baito. Baitų srautas tinka neapdorotiems duomenims, pvz., dvejetainiams failams, apdoroti.

Pagrindiniai punktai naudojant ir dirbant su bet kuriuo iš aukščiau išvardytų srautų:

  • Simbolių srauto klasės paprastai baigiasi „Reader / Writer“, o baitų srauto klasės baigiasi „InputStream“ / „OutputStream“.
  • Šiame straipsnyje pateiktuose kodų pavyzdžiuose naudojami nebuferiniai srautai, kurie yra mažiau veiksmingi. Siekdami geresnio našumo, dažniausiai juos apvyniojame BufferedReader/BufferedWriter (simbolių srautai) arba BufferedInputStream/BufferedOutputStream (baitų srautai).
  • Visada uždarykite srautus po naudojimo, kad atlaisvintumėte išteklių ir išvengtumėte klaidų.
  • Pirmiau minėti kodai gali neveikti internetiniuose kompiliatoriuose, nes failų gali nebūti.

Simbolių srautas

Java simboliai saugomi naudojant Unicode konvencijas. Simbolių srautas automatiškai leidžia mums skaityti / rašyti duomenis po simbolio. Pavyzdžiui, „FileReader“ ir „FileWriter“ yra simbolių srautai, naudojami skaityti iš šaltinio ir rašyti į paskirties vietą.

non_unicode_bytesSimbolių srautai

Pavyzdys

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

Išvestis:

Rašo turinį į tikslinį failą simbolis po simbolio

Programa sėkmingai įvykdyta

Baitų srautas

„Java“ baitų srautas yra srautas, tvarkantis neapdorotų 8 bitų dvejetainių duomenų įvestį ir išvestį. Jis daugiausia naudojamas netekstiniams duomenims, pvz., vaizdams, garso ir vaizdo įrašams arba bet kokiam dvejetainiam failui, skaityti ir rašyti. Pavyzdžiui FileInputStream naudojamas skaityti iš šaltinio ir FileOutputStream rašyti į paskirties vietą.

Pavyzdys:

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

Išvestis:

Programa sėkmingai įvykdyta

Simbolių srauto ir baitų srauto skirtumai

Aspektas Simbolių srautas Baitų srautas
Duomenų tipas tvarkomas 16 bitų unikodo simboliai (tekstas) 8 bitų neapdoroti duomenys (dvejetainiai)
Pamokos baigiasi Skaitytojas / Rašytojas InputStream / OutputStream
Tinka Tekstiniai failai Unicode duomenys Vaizdai garso ir vaizdo dvejetainiai failai
Konversija Automatiškai konvertuoja baitus į simbolius Joks konvertavimas neveikia naudojant neapdorotus baitus
Pavyzdžiai FileReader FileWriter FileInputStream FileOutputStream

Susijęs straipsnis

  • Java IO – Java įvestis/išvestis su pavyzdžiais