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








