logo

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.

mitä pythonissa on
  • 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_bytes' title=Hahmovirrat

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

kokeile catch block java

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

AspektiHahmovirtaTavuvirta
Käsitelty tietotyyppi16-bittiset Unicode-merkit (teksti)8-bittinen raakadata (binääri)
Luokat päättyvätLukija / KirjoittajaInputStream / OutputStream
Sopii käytettäväksiTekstitiedostot Unicode-tiedotKuvat ääni-video binaaritiedostot
MuuntaminenMuuntaa tavut merkeiksi automaattisestiMikään muunnos ei toimi raakatavuilla
EsimerkkejäFileReader FileWriterFileInputStream FileOutputStream

Aiheeseen liittyvä artikkeli

  • Java IO - Input/Output Javassa esimerkein