Tässä opetusohjelmassa opit Java InputStreamReaderista ja sen menetelmistä esimerkkien avulla.
InputStreamReader
Luokan java.io
paketti voidaan käyttää muuntamaan dataa tavuina dataksi merkkiä.
Se laajentaa abstraktia luokkaa Reader
.
InputStreamReader
Luokka toimii muiden syötevirtojen. Se tunnetaan myös sillana tavuvirtojen ja merkkivirtausten välillä. Tämä johtuu siitä, että InputStreamReader
lukee 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 InputStreamReader
meidän on java.io.InputStreamReader
ensin 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 InputStreamReader
nimetyn syötteen FileInputStream
nimetyn 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 Charset
luokkaa määrittelemään tiedostossa olevan merkkikoodauksen.
InputStreamReader-menetelmät
InputStreamReader
Luokka antaa toteutuksia eri menetelmiä esittää, että Reader
luokan.
read () Menetelmä
read()
- lukee yhden merkin lukijaltaread(char() array)
- lukee merkit lukijalta ja tallentaa määritettyyn ryhmäänread(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).