Java InputStreamReader (esimerkkien kanssa)

Tässä opetusohjelmassa opit Java InputStreamReaderista ja sen menetelmistä esimerkkien avulla.

InputStreamReaderLuokan java.iopaketti voidaan käyttää muuntamaan dataa tavuina dataksi merkkiä.

Se laajentaa abstraktia luokkaa Reader.

InputStreamReaderLuokka toimii muiden syötevirtojen. Se tunnetaan myös sillana tavuvirtojen ja merkkivirtausten välillä. Tämä johtuu siitä, että InputStreamReaderlukee tavut tulovirrasta merkkeinä.

Jotkut merkit vaativat esimerkiksi 2 tavua tallennettavaksi muistiin. Tällaisten tietojen lukemiseen voidaan käyttää tulovirran lukijaa, joka lukee 2 tavua yhdessä ja muuntaa vastaavaksi merkiksi.

Luo InputStreamReader

Paketin luomiseksi InputStreamReadermeidän on java.io.InputStreamReaderensin tuotava paketti. Kun tuot paketin täältä, voimme luoda tulovirran lukijan.

 // Creates an InputStream FileInputStream file = new FileInputStream(String path); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file); 

Yllä olevassa esimerkissä olemme luoneet InputStreamReadernimetyn syötteen FileInputStreamnimetyn tiedoston kanssa.

Tässä tiedostossa olevat tiedot tallennetaan käyttäen jotain oletuskoodausta.

Voimme kuitenkin määrittää myös tiedostossa olevan merkkikoodauksen tyypin ( UTF8 tai UTF16 ).

 // Creates an InputStreamReader specifying the character encoding InputStreamReader input = new InputStreamReader(file, Charset cs); 

Tässä olemme käyttäneet Charsetluokkaa määrittelemään tiedostossa olevan merkkikoodauksen.

InputStreamReader-menetelmät

InputStreamReaderLuokka antaa toteutuksia eri menetelmiä esittää, että Readerluokan.

read () Menetelmä

  • read() - lukee yhden merkin lukijalta
  • read(char() array) - lukee merkit lukijalta ja tallentaa määritettyyn ryhmään
  • read(char() array, int start, int length) - lukee lukijalta pituuden verran merkkien lukumäärän ja tallentaa määrätyn matriisin alusta alkaen

Oletetaan esimerkiksi, että meillä on tiedosto nimeltä input.txt, jolla on seuraava sisältö.

 This is a line of text inside the file. 

Yritetään lukea tämä tiedosto InputStreamReader.

 import java.io.InputStreamReader; import java.io.FileInputStream; class Main ( public static void main(String() args) ( // Creates an array of character char() array = new char(100); try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates an InputStreamReader InputStreamReader input = new InputStreamReader(file); // Reads characters from the file input.read(array); System.out.println("Data in the stream:"); System.out.println(array); // Closes the reader input.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Tuotos

 Streamin tiedot: Tämä on tekstirivi tiedoston sisällä. 

Edellä olevassa esimerkissä olemme luoneet tulovirran lukijan käyttämällä tiedoston syöttövirtaa. Tulovirran lukija on linkitetty tiedostoon input.txt .

  FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file); 

Luemme merkkejä tiedostosta olemme käyttäneet read()menetelmää.

getEncoding () -menetelmä

getEncoding()Menetelmää voidaan käyttää saamaan tyypin koodaus, jota käytetään tallentamaan tietoa tulosignaalista. Esimerkiksi,

 import java.io.InputStreamReader; import java.nio.charset.Charset; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates an InputStreamReader with default encoding InputStreamReader input1 = new InputStreamReader(file); // Creates an InputStreamReader specifying the encoding InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8")); // Returns the character encoding of the input stream System.out.println("Character encoding of input1: " + input1.getEncoding()); System.out.println("Character encoding of input2: " + input2.getEncoding()); // Closes the reader input1.close(); input2.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Tuotos

 Tulon1 merkkikoodaus: Cp1252 Tulon2 merkkikoodaus: UTF8 

Yllä olevassa esimerkissä olemme luoneet 2 tulovirranlukijaa nimeltään input1 ja input2.

  • input1 ei määritä merkkikoodausta. Siksi getEncoding()menetelmä palauttaa oletusmerkkikoodauksen kanonisen nimen.
  • input2 määrittää merkkikoodauksen UTF8 . Siksi getEncoding()menetelmä palauttaa määritetyn merkkikoodauksen.

Huomaa : Olemme käyttäneet Charset.forName()menetelmää merkkien koodauksen tyypin määrittämiseen. Lisätietoja on Java Charset -sivustossa (virallinen Java-dokumentaatio).

sulje () Menetelmä

Tulovirranlukijan sulkemiseksi voimme käyttää close()menetelmää. Kun close()menetelmä on kutsuttu, emme voi käyttää lukijaa tietojen lukemiseen.

Muut InputStreamReader-menetelmät

Menetelmä Kuvaus
ready() tarkistaa, onko virta valmis lukemaan
mark() merkitse virta-asema, johon tiedot on luettu
reset() palauttaa ohjauksen virran pisteeseen, johon merkki asetettiin

Lisätietoja on Java InputStreamReader -sivustossa (virallinen Java-dokumentaatio).

Mielenkiintoisia artikkeleita...