JavaRush /Blog Jawa /Random-JV /Maca saka keyboard - "maca"

Maca saka keyboard - "maca"

Diterbitake ing grup
Hello! Ing kuliah lan tugas, kita sinau carane output data menyang console, lan kosok balene - maca data saka keyboard. Maca saka keyboard - "pembaca" - 1Sampeyan malah sinau nggunakake konstruksi kompleks kanggo iki:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Nanging kita isih durung mangsuli pitakonan siji.

Carane iki malah bisa?

Nyatane, program apa wae sing paling kerep ora ana dhewe. Bisa komunikasi karo program, sistem, Internet, lsp. Miturut tembung "komunikasi" kita pisanan kabeh tegese "ijol-ijolan data". Sing, nampa sawetara data saka njaba, lan, ing nalisir, ngirim data dhewe nang endi wae. Ana akeh conto ijol-ijolan data antarane program, sanajan ing urip saben dina. Dadi, ing akeh situs, tinimbang ndhaptar, sampeyan bisa mlebu nggunakake akun Facebook utawa Twitter. Ing kahanan iki, loro program, ngomong, Twitter lan situs ngendi sampeyan nyoba kanggo ndhaftar, ijol-ijolan data sing perlu karo saben liyane, sawise sampeyan ndeleng asil pungkasan - wewenang sukses. Istilah " aliran " asring digunakake kanggo njlèntrèhaké proses ijol-ijolan data ing pemrograman . Saka ngendi asale jeneng iki? "Arus" luwih digandhengake karo kali utawa stream tinimbang karo program. Nyatane, iki ora tanpa alesan :) A stream, ing intine, data sing obah. Tegese, ing pemrograman, dudu banyu sing "milih" ing sadawane stream, nanging data ing wangun bita lan karakter. Saka stream data, kita bisa nampa data ing bagean lan nindakake soko karo. Maneh, ayo nggunakake analogi "mili banyu": sampeyan bisa njupuk banyu saka kali kanggo masak sup, mateni geni, utawa banyu kembang. Nggunakake stream, sampeyan bisa nggarap sumber data apa wae: Internet, sistem file komputer, utawa liya-liyane - ora masalah. Aliran minangka alat universal. Padha ngidini program nampa data saka ngendi wae (stream mlebu) lan ngirim menyang ngendi wae (stream metu). Tugase siji - kanggo njupuk data ing sak panggonan lan ngirim menyang liyane. Aliran dipérang dadi rong jinis:
  1. Aliran mlebu ( Input ) - digunakake kanggo nampa data
  2. Outgoing stream ( Output ) - kanggo ngirim data.
Alur data mlebu ing basa Jawa ditindakake ing kelas InputStream, lan alur data metu ing kelas OutputStream. Nanging ana cara liya kanggo mbagi benang. Dheweke dipérang ora mung dadi mlebu lan metu, nanging uga dadi bait lan karakter . Ing kene maknane cetha tanpa katrangan: stream byte ngirimake informasi ing wangun sakumpulan bita, lan stream karakter ngirim informasi ing wangun sakumpulan karakter. Ing kuliah iki kita bakal njlentrehake kanthi rinci babagan aliran sing mlebu. Lan aku bakal masang informasi babagan pranala metu ing pungkasan, lan sampeyan bisa maca babagan dhewe :) Dadi, kode kita:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Sampeyan mbokmenawa mikir nalika maca ceramah sing katon cukup medeni? :) Nanging iki mung nganti kita ngerti carane bab iki bisa. Ayo didandani saiki! Ayo miwiti saka pungkasan. System.inminangka obyek saka kelas InputStreamsing kita rembugan ing wiwitan. Iki minangka stream mlebu, lan disambungake menyang piranti input sistem - keyboard. Miturut cara, sampeyan ora langsung kenal karo dheweke. Sawise kabeh, sampeyan kerep nggunakake "kolega" ing karya - System.out! System.out- iki stream output data sistem , digunakake kanggo output kanggo console ing cara banget System.out.println()sing terus-terusan digunakake :) System.out- stream kanggo ngirim data kanggo console, lan System.in- kanggo nampa data saka keyboard. Iku prasaja :) Menapa malih: kanggo maca data saka keyboard, kita bisa nindakake tanpa construction gedhe iki lan mung nulis: System.in.read();
public class Main {

   public static void main(String[] args) throws IOException {

       while (true) {
           int x = System.in.read();
           System.out.println(x);
       }
   }
}
Ing kelas InputStream(lan System.in, mugi kula ngelingake sampeyan, iku obyek saka kelas InputStream) ana cara read()sing ngijini sampeyan kanggo maca data. Siji masalah: maca bita , dudu karakter . Ayo nyoba maca huruf Rusia "Ya" saka keyboard. Output konsol:
Я
208
175
10
Huruf Rusia njupuk 2 bita ing memori komputer (ora kaya huruf Inggris, sing mung njupuk 1). Ing kasus iki, 3 bait diwaca saka stream: loro pisanan makili huruf kita "I", lan siji liyane iku baris break (Ketik). Mulane, pilihan kanggo nggunakake "wuda" System.inora cocog karo kita. Manungsa (karo pangecualian langka!) Ora bisa maca bait. Iki ngendi kelas sabanjuré teka kanggo bantuan kita - InputStreamReader! Ayo ngerteni kewan apa iki.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
We pass stream System.inmenyang InputStreamReader. Umumé, yen sampeyan nerjemahake jeneng menyang basa Rusia, kabeh katon ketok - "maca stream mlebu". Bener, iku pancene kanggo! Kita nggawe obyek kelas InputStreamReaderlan pass stream mlebu saka kang kudu maca data. Ing kasus iki...
new InputStreamReader(System.in)
... kita ngandhani: "sampeyan bakal maca data saka aliran input sistem (keyboard)." Nanging iki ora mung fungsi! InputStreamReaderora mung nampa data saka stream. Iki uga ngowahi stream byte dadi stream karakter . Kanthi tembung liyane, sampeyan ora perlu kuwatir maneh babagan nerjemahake data sing diwaca saka basa "komputer" menyang basa "manungsa" - InputStreamReaderkabeh bakal ditindakake kanggo sampeyan. InputStreamReader, mesthi, bisa maca data ora mung saka console, nanging uga saka panggonan liyane. Contone, saka file:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

   public static void main(String[] args) throws IOException {
       InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("C:\\Users\\username\\Desktop\\testFile.txt"));
   }
}
Kene kita nggawe stream data mlebu FileInputStream(iki salah siji saka varieties InputStream), liwat path menyang file menyang, lan liwat stream dhewe InputStreamReader'y. Saiki bakal bisa maca data saka file iki, yen file ing path iki ana, mesthi. Kanggo maca data (ora ketompo saka ngendi, saka console, file, utawa ing ngendi wae), kelas InputStreamReaderuga nggunakake read(). Apa bedane antarane System.in.read()lan InputStreamReader.read()? Coba etung huruf “I” sing padha nganggo InputStreamReader. Ayo kula ngelingake sampeyan, iki sing dakkarepake System.in.read():
Я
208
175
10
Kepiye carane dheweke bisa nindakake pakaryan sing padha InputStreamReader?
public class Main {

   public static void main(String[] args) throws IOException {

       InputStreamReader reader = new InputStreamReader(System.in);
       while (true) {
           int x = reader.read();
           System.out.println(x);
       }
   }
}
Output konsol:
Я
1071
10
Bentenipun langsung katon. Byte pungkasan - kanggo baris break - tetep ora diganti (nomer 10), nanging huruf diwaca "I" diowahi dadi kode siji "1071". Iki maca kanthi simbol! Yen tiba-tiba sampeyan ora percaya yen kode 1071 tegese huruf "I", sampeyan bisa verifikasi kanthi gampang :)
import java.io.IOException;

public class Main {

   public static void main(String[] args) throws IOException {

       char x = 1071;
       System.out.println(x);
   }
}
Output konsol:

Я
Nanging yen InputStreamReaderapik banget, kenapa sampeyan butuh liyane BufferedReader? InputStreamReaderbisa maca data lan ngowahi bita dadi karakter - apa maneh sing kita butuhake? Kenapa Reader liyane? :/ Jawaban iki prasaja banget - kanggo produktivitas luwih lan penak luwih . Ayo dadi miwiti karo kinerja. Nalika maca data, BufferedReader nggunakake area khusus - buffer, ing ngendi "nambah" karakter sing diwaca. Akibaté, nalika kita kudu karakter iki ing program, padha bakal dijupuk saka buffer, lan ora langsung saka sumber data (keyboard, file, etc.), Lan iki nyimpen akèh sumber. Kanggo ngerti cara kerjane, mbayangno, contone, karya kurir ing perusahaan gedhe. Kurir lungguh ing kantor lan ngenteni bingkisan digawa menyang dheweke kanggo dikirim. Saben entuk bingkisan anyar, dheweke bisa langsung menyang dalan. Nanging bisa uga ana akeh bingkisan sajrone awan, lan dheweke kudu lelungan ing antarane kantor lan alamat saben wektu. Nanging, kurir kasebut nyelehake kothak ing kantor supaya saben wong bisa nyelehake bingkisan. Saiki kurir bisa kanthi tenang njupuk kothak lan menyang alamat - dheweke bakal ngirit akeh wektu, amarga dheweke ora kudu bali menyang kantor saben wektu. Kothak ing conto iki sabenere buffer, lan kantor minangka sumber data. Iku luwih gampang kanggo kurir njupuk layang saka kothak umum nalika ngirim saka menyang kantor saben wektu. Iku uga bakal ngirit bensin. Iku padha ing program - iku akeh kurang sumber-intensif kanggo njupuk data saka buffer, tinimbang ngakses sumber data saben wektu. Mulane BufferedReader+ InputStreamReaderdianggo luwih cepet tinimbang mung InputStreamReader. Kita wis ngurutake kinerja, nanging kepiye babagan penak? Kauntungan utama yaiku BufferedReaderbisa maca data ora mung siji karakter sekaligus (sanajan read()uga duwe metode kanggo tujuan iki), nanging uga kabeh baris! Iki ditindakake kanthi nggunakake readLine();
public class Main {

   public static void main(String[] args) throws IOException {

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       String s = reader.readLine();
       System.out.println("We read this line from the keyboard:");
       System.out.println(s);
   }
}
Output konsol:
JavaRush is the best site to learn Java!
Мы считали с клавиатуры эту строку:
JavaRush — лучший сайт для изучения Java!
Iki utamané migunani nalika maca jumlah gedhe saka data. Siji utawa rong baris teks isih bisa diwaca kanthi karakter. Nanging ngetung "Perang lan Damai" siji-sijine huruf bakal dadi masalah :) Saiki karya benang wis dadi luwih jelas kanggo sampeyan. Kanggo sinau luwih lanjut, iki sumber tambahan kanggo sampeyan: Kene sampeyan bisa maca liyane babagan aliran mlebu lan metu. Video review BufferedReadersaka salah sawijining siswa. Ya, ya, siswa kita ora mung sinau dhewe, nanging uga ngrekam video pendidikan kanggo wong liya! Jangan lupa like and subscribe channel kami :)
Luwih becik sinau maca dokumentasi resmi wiwit wiwitan sinau. Iki minangka sumber utama kawruh babagan basa, lan paling akeh jawaban bisa ditemokake ing kono.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION