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.
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
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