Miksi BufferedReader
Puskuroitu ja puskuroimaton lukeminen.
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→ tavutInputStreamReader→ merkitBufferedReader→ 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.
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
- Miksi BufferedReader
- Rivien lukeminen
- Lukujen jäsentäminen syötteestä
- Virtojen turvallinen sulkeminen