Java Academy · Oppitunti

Miksi BufferedReader

Puskuroitu ja puskuroimaton lukeminen.

Oppitunti 1/413 vaihetta

Miksi BufferedReader on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Syötteen lukeminen Javalla

Useimmat käytännön ohjelmat tarvitsevat käyttäjän syötettä: nimen, luvun tai komennon. Javassa on useita tapoja lukea syötettä, mutta yksi yleisimmistä ja tehokkaimmista on BufferedReader.

Tässä oppitunnissa opitte, miksi BufferedReader on olemassa ja milloin sitä kannattaa käyttää.

Mistä syöte tulee

Kun kirjoitatte konsoliin, teksti kulkee System.in-virran kautta. Se on matalan tason tavuvirta — se antaa raakatavuja, ei helposti käsiteltävää tekstiä.

Jotta tavut voidaan muuntaa luettaviksi merkeiksi ja kokonaisiksi riveiksi, System.in ympäröidään apuluokilla. BufferedReader on kääre, joka tekee tästä helppoa.

Mitä ”Buffered” tarkoittaa

Näytön näppäimistöltä tai tiedostosta yhden tavun lukeminen kerrallaan on hidasta. Puskuri on muistialue, johon mahtuu kerralla paljon merkkejä.

BufferedReader täyttää puskurin suurina erinä ja antaa sitten tietoja nopeasti. Mitä vähemmän pohjana olevaan virtaan tarvitsee tehdä lukuoperaatioita, sitä parempi suorituskyky saavutetaan, erityisesti suurten syötteiden kanssa.

Kaksikerroksinen rakenne

BufferedReader ei voi lukea System.in-virtaa suoraan, koska virta antaa tavuja. Ensin se kääritään InputStreamReader-olioon, joka muuntaa tavut merkeiksi.

  • System.in → tavut
  • InputStreamReader → merkit
  • BufferedReader → puskuroitavat rivit
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Perinteinen yhden rivin ratkaisu

Tämän täsmällisen rivin näette lähes jokaisessa Java-ohjelmassa, joka lukee konsolista syötettä. Se ketjuttaa molemmat kääreet yhteen lausekkeeseen.

Muistakaa: sisempi InputStreamReader käsittelee tavujen muuntamisen merkeiksi, ja ulompi BufferedReader lisää puskuroinnin sekä kätevän readLine()-metodin.

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));

Tarvittavat importit

Nämä luokat kuuluvat java.io-pakettiin, joten ne on tuotava tiedoston alkuun.

Syötteen lukeminen voi epäonnistua, joten metodit heittävät IOException-poikkeuksen — myös se on tuotava tai käsiteltävä. Käsittelemme tämän myöhemmin.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

BufferedReader ja Scanner

Aloittelijat tutustuvat usein ensin Scanner-luokkaan. Se on helppokäyttöisempi, koska se osaa jäsentää luvut suoraan, mutta hitaampi.

  • Scanner: helppo jäsentäminen, enemmän yleiskustannuksia.
  • BufferedReader: nopeampi ja lukee kokonaisia rivejä, mutta luvut on jäsennettävä itse.

Suurilla syötteillä tai kilpailuohjelmoinnissa BufferedReader on nopeampi.

Kokonaisen rivin lukeminen

Tärkein metodi on readLine(). Se lukee kaiken, mitä käyttäjä kirjoittaa Enter-näppäimen painamiseen asti, ja palauttaa sen String-oliona ilman rivinvaihtoa.

Jos syötettä ei ole enää saatavilla, readLine() palauttaa null-arvon. Tutustumme tähän seuraavassa oppitunnissa.

String name = br.readLine();
System.out.println("Hello, " + name);

Kokonainen lukuohjelma

Tässä on kokonainen ohjelma. Se lukee yhden rivin ja tervehtii käyttäjää. Huomatkaa main-metodin yhteydessä oleva throws IOException — se on oppimisen aikana nopea tapa antaa syötevirheiden välittyä eteenpäin.

Tämä katkelma odottaa näppäimistöltä syötettä, joten sitä ei voi suorittaa täällä automaattisesti, mutta se on kelvollista Javaa.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String name = br.readLine();
        System.out.println("Hi " + name);
    }
}

Toiminnan todistaminen ilman syötettä

Jotta näette kääreiden olevan olemassa ja kääntyvän oikein, tässä on suoritettava versio, joka ei lue mitään — se vain varmistaa, että olio luodaan.

Oikeassa sovelluksessa kutsuisitte readLine()-metodia, mutta tämä versio tulostaa viestin, joten voitte suorittaa sen heti.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        System.out.println("BufferedReader is ready!");
    }
}

Milloin BufferedReaderia kannattaa käyttää

Valitkaa BufferedReader, kun:

  • luette useita rivejä tai suuria tiedostoja,
  • välitätte nopeudesta,
  • haluatte käsitellä tekstiä yksinkertaisesti rivi kerrallaan.

Käyttäkää sen sijaan Scanner-luokkaa, kun haluatte jäsentää luvut nopeasti ja syöte on pieni. Molemmat ovat kelvollisia vaihtoehtoja — valitkaa tilanteeseen sopiva työkalu.

Pikatarkistus

Testatkaa, ymmärrättekö BufferedReader-asetukset.

Kertaus

Opitte, että System.in on tavuvirta, jonka ympärille kääritään ensin InputStreamReader (tavuista merkeiksi) ja sitten BufferedReader (puskurointi sekä readLine()).

Puskurointi parantaa suorituskykyä, ja BufferedReader sopii erinomaisesti suuriin tai rivipohjaisiin syötteisiin. Seuraavaksi käsittelemme rivien lukemista yksityiskohtaisesti.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Miksi BufferedReader” ilmainen?

Kyllä – oppitunnin ”Miksi BufferedReader” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Miksi BufferedReader”?

Puskuroitu ja puskuroimaton lukeminen. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Miksi BufferedReader”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Miksi BufferedReader
  2. Rivien lukeminen
  3. Lukujen jäsentäminen syötteestä
  4. Virtojen turvallinen sulkeminen
← Takaisin: Java Academy