Character Stream vs Byte Stream Javassa

Character Stream vs Byte Stream Javassa

Virta on jatkuva datavirta. Javassa I/O-virtoja käytetään lukemiseen tulolähteistä tai kirjoittamiseen tulostuskohteisiin, kuten tiedostoihin. Ne tarjoavat tavan päästä tietoihin peräkkäin. Java.io-paketti sisältää luokat sekä tavuvirtojen että merkkivirtojen käsittelyyn sekä niiden väliseen muuntamiseen.

  • Syöttövirta: lukee dataa lähteestä. 
  • Lähtövirta: kirjoittaa tietoja määränpäähän. 

Milloin merkkivirtaa käytetään tavuvirran yli:

Javassa merkit tallennetaan Unicode-käytäntöjen mukaisesti. Merkkivirta on hyödyllinen, kun haluamme käsitellä tekstitiedostoja. Näitä tekstitiedostoja voidaan käsitellä merkki merkiltä. Merkkikoko on yleensä 16 bittiä.

Milloin tavuvirtaa kannattaa käyttää merkkivirrassa:

Tavusuuntautunut lukee tavu tavulta. Tavuvirta soveltuu raakadatan, kuten binääritiedostojen, käsittelyyn.

Tärkeimmät asiat käytettäessä ja käsiteltäessä mitä tahansa yllä olevista virroista:

  • Merkkivirtaluokat päättyvät yleensä Reader/Writeriin, kun taas tavuvirtaluokat päättyvät InputStream/OutputStream.
  • Tämän artikkelin esimerkkikoodit käyttävät puskuroimattomia virtoja, jotka ovat vähemmän tehokkaita. Suorituskyvyn parantamiseksi käärimme ne yleensä BufferedReader/BufferedWriter (merkkivirrat) tai BufferedInputStream/BufferedOutputStream (tavuvirrat).
  • Sulje streamit aina käytön jälkeen vapauttaaksesi resursseja ja estääksesi virheet.
  • Yllä olevat koodit eivät välttämättä toimi online-kääntäjissä, koska tiedostoja ei välttämättä ole olemassa.

Hahmovirta

Javassa merkit tallennetaan Unicode-käytäntöjen mukaisesti. Merkkivirran avulla voimme automaattisesti lukea/kirjoittaa tietoja merkki kerrallaan. Esimerkiksi FileReader ja FileWriter ovat merkkivirtoja, joita käytetään lukemiseen lähteestä ja kirjoittamiseen kohteeseen.

non_unicode_bytesHahmovirrat

Esimerkki

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

Lähtö:

Kirjoittaa sisältöä kohdetiedostoon merkki merkiltä

Ohjelma suoritettu onnistuneesti

Tavuvirta

Tavuvirta Javassa on tietovirta, joka käsittelee 8-bittisen raakabinaaridatan syöttöä ja tulostusta. Sitä käytetään pääasiassa ei-tekstidatan, kuten kuvien audio-videon tai minkä tahansa binaaritiedoston lukemiseen ja kirjoittamiseen. Esimerkiksi FileInputStream käytetään lukemiseen lähteestä ja FileOutputStreamia kirjoittamiseen kohteeseen.

Esimerkki:

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

Lähtö:

Ohjelma suoritettu onnistuneesti

Merkkivirran ja tavuvirran erot

Aspekti Hahmovirta Tavuvirta
Käsitelty tietotyyppi 16-bittiset Unicode-merkit (teksti) 8-bittinen raakadata (binääri)
Luokat päättyvät Lukija / Kirjoittaja InputStream / OutputStream
Sopii käytettäväksi Tekstitiedostot Unicode-tiedot Kuvat ääni-video binaaritiedostot
Muuntaminen Muuntaa tavut merkeiksi automaattisesti Mikään muunnos ei toimi raakatavuilla
Esimerkkejä FileReader FileWriter FileInputStream FileOutputStream

Aiheeseen liittyvä artikkeli

  • Java IO - Input/Output Javassa esimerkein