JavaRush /Java Blog /Random-TK /Klawiaturadan okamak - “okyjylar”

Klawiaturadan okamak - “okyjylar”

Toparda çap edildi
Salam! Leksiýalarda we meselelerde konsola maglumatlary nädip çykarmalydygyny, tersine - klawiaturadan maglumatlary okamagy öwrendik. Klawiaturadan okamak - “okyjylar” - 1Hatda munuň üçin çylşyrymly gurluşyk ulanmagy öwrendiňiz:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Emma henizem bir soraga jogap bermedik.

Bu hatda nähili işleýär?

Aslynda, islendik programma köplenç öz-özünden ýok. Beýleki programmalar, ulgamlar, internet we ş.m. bilen aragatnaşyk gurup biler. “Aragatnaşyk” sözi bilen ilki bilen “maglumat alyşmak” diýmekdir. .Agny, daşardan käbir maglumatlary alyň we tersine, öz maglumatlaryňyzy bir ýere iberiň. Gündelik durmuşda-da programmalaryň arasynda maglumat alyşmagyň köp mysallary bar. Şeýlelik bilen, köp saýtda hasaba durmagyň ýerine Facebook ýa-da Twitter hasabyňyzy ulanyp girip bilersiňiz. Bu ýagdaýda, Twitter we bellige alynjak bolýan iki programma, zerur maglumatlary biri-biri bilen alyş-çalyş ediň, şondan soň ahyrky netijäni görersiňiz - üstünlikli ygtyýar. “ Akym ” adalgasy köplenç programmirlemekde maglumat alyş-çalşyny beýan etmek üçin ulanylýar . Bu at hatda nireden gelip çykypdyr? “Akym” programmirlemek bilen däl-de, derýa ýa-da akym bilen has baglanyşyklydyr. Aslynda bu sebäpsiz däl :) Akym, aslynda, hereket edýän maglumatlar. Programmingagny, programmirlemekde akymyň boýunda “akýan” suw däl-de, baýt we simwollar görnüşindäki maglumatlar. Maglumat akymyndan maglumatlary böleklere bölüp bileris we onuň bilen bir zatlar edip bileris. Againene-de “suw akýan” meňzeşligi ulanalyň: çorba bişirmek, ot ýakmak ýa-da gül gülleri üçin derýadan suw alyp bilersiňiz. Akymlary ulanyp, islendik maglumat çeşmesi bilen işläp bilersiňiz: Internet, kompýuteriňiziň faýl ulgamy ýa-da başga bir zat - bu möhüm däl. Akymlar ähliumumy guraldyr. Programma islendik ýerden (gelýän akymlar) maglumatlary almaga we islendik ýere (çykýan akymlar) ibermäge mümkinçilik berýär. Olaryň wezipesi bir - maglumatlary bir ýere alyp, başga ýere ibermek. Akymlar iki görnüşe bölünýär:
  1. Gelýän akym ( Giriş ) - maglumatlary almak üçin ulanylýar
  2. Çykýan akym ( çykyş ) - maglumat ibermek üçin.
Java-da gelýän maglumatlar akymy synpda InputStream, çykýan maglumatlar akymy bolsa synpda amala aşyrylýar OutputStream. Threadöne sapaklary bölmegiň başga bir usuly bar. Olar diňe gelýän we çykýanlara däl, eýsem baýt we häsiýetlere- de bölünýärler . Bu ýerde manysy düşündirişsiz düşnüklidir: baýt akymy maglumatlary baýtlar toplumy görnüşinde, nyşanlaryň akymy bolsa nyşanlaryň toplumy görnüşinde maglumat berýär. Bu leksiýada gelýän akymlar barada jikme-jik durup geçeris. Soňunda çykýan baglanyşyklar barada maglumat goşaryn, bu hakda özüňiz okap bilersiňiz :) Şeýlelik bilen, kodumyz:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Leksiýalary okaýarkaňyz gaty gorkunç diýip pikir eden bolsaňyz gerek? :) thisöne bu diňe bu zadyň nähili işleýändigini anyklaýançak. Geliň indi düzedeliň! Soňundan başlalyň. başynda gürleşen System.insynpymyzyň obýekti . InputStreamBu gelýän akym we ulgam giriş enjamyna - klawiatura bilen baglanyşykly. .Eri gelende aýtsak, siz onuň bilen gytaklaýyn tanyş. Galyberse-de, işiňizde onuň “kärdeşini” köplenç ulanýarsyňyz - System.out! - bu ulgam maglumat çykaryşSystem.out akymy , konsola yzygiderli ulanýan usulyňyzda çykyş üçin ulanylýar :) - konsola maglumat ibermek we klawiaturadan maglumat almak üçin akym. Bu ýönekeý :) Mundan başga-da: klawiaturadan maglumatlary okamak üçin bu uly gurluşyksyz edip bileris we ýönekeý ýazyp bileris : ; System.out.println()System.outSystem.inSystem.in.read()
public class Main {

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

       while (true) {
           int x = System.in.read();
           System.out.println(x);
       }
   }
}
Synpda InputStream(we System.in, ýatladýaryn, synpyň obýekti ) maglumatlary okamaga mümkinçilik berýän InputStreamusul bar . Bir mesele: nyşanlary däl-de, baýtlaryread() okaýar . Rus dilindäki “Ya” harpyny klawiaturadan okamaga synanyşalyň. Konsol çykyşy:
Я
208
175
10
Rus harplary kompýuteriň ýadynda 2 baýt alýar (diňe 1 harpy alýan iňlis harplaryndan tapawutlylykda). Bu ýagdaýda akymdan 3 baýt okaldy: ilkinji ikisi “I” harpymyzy görkezýär, beýlekisi setir arakesmesi (Enter). Şonuň üçin “ýalaňaç” ulanmak mümkinçiligi System.inbize laýyk gelmez. Adamlar (seýrek ýagdaýlardan başga ýagdaýlarda!) Baýt okap bilmeýärler. Indiki synp bize kömek edýär - InputStreamReader! Geliň, munuň haýsy haýwandygyny anyklalyň.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.inAkymy geçýäris InputStreamReader. Umuman aýdanyňda, adyny rus diline terjime etseň, hemme zat düşnükli görünýär - “gelýän akymlary okaýjy”. Aslynda, munuň özi! Synp obýektini döredýäris InputStreamReaderwe maglumatlary okamaly gelýän akymdan geçirýäris. Bu ýagdaýda ...
new InputStreamReader(System.in)
... biz oňa: "ulgam giriş akymyndan (klawiatura) maglumatlary okarsyňyz." Emma bu onuň ýeke-täk wezipesi däl! InputStreamReaderdiňe akymdan maglumat almaýar. Şeýle hem, baýt akymlaryny nyşan akymlaryna öwürýär . Başga bir söz bilen aýdylanda, okalan maglumatlary “kompýuter” dilinden “adam” diline terjime etmek barada alada etmegiň zerurlygy ýok - InputStreamReaderbu siziň üçin hemme zady eder. InputStreamReaderelbetde maglumatlary diňe konsoldan däl, eýsem beýleki ýerlerden hem okap biler. Mysal üçin, faýldan:
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"));
   }
}
Bu ýerde gelýän maglumat akymyny döretdik FileInputStream(bu görnüşleriň biri InputStream), faýla barýan ýoly geçdik we akymyň özi geçdik InputStreamReader. Indi bu ýoldaky faýl bar bolsa, bu faýldan maglumatlary okap biler. Maglumatlary okamak üçin (konsoldan, faýldan ýa-da başga bir ýerden tapawudy ýok) synp InputStreamReaderhem ulanýar read(). System.in.read()Arasynda näme tapawut bar InputStreamReader.read()? Geliň, şol bir “men” harpyny sanamaga synanyşalyň InputStreamReader. Youatladýaryn, şu pikir etdim System.in.read():
Я
208
175
10
Şol bir işi nädip edip biler 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);
       }
   }
}
Konsol çykyşy:
Я
1071
10
Tapawut derrew görünýär. Iň soňky baýt - setir arakesmeleri üçin - üýtgemedi (10 belgisi), ýöne "Men" okalýan harp "1071" ýekeje koda öwrüldi. Bu nyşanlar bilen okalýar! Birden 1071 kody “men” harpyny aňladýandygyna ynanmasaňyz, muny aňsatlyk bilen barlap bilersiňiz :)
import java.io.IOException;

public class Main {

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

       char x = 1071;
       System.out.println(x);
   }
}
Konsol çykyşy:

Я
Soöne InputStreamReadergaty gowy bolsa, näme üçin has köp gerek BufferedReader? InputStreamReadermaglumatlary hem okap, hem baýtlary simwollara öwrüp biler - bize başga näme gerek? Näme üçin başga bir okyjy? : / Jogap gaty ýönekeý - has köp öndürijilik we has amatlylyk üçin . Çykyşdan başlalyň. Maglumatlary okaýarka, BufferedReader ýörite bir meýdany - bufer ulanýar, bu ýerde okalýan nyşanlary “goşýar”. Netijede, programmada bu nyşanlara mätäç bolanymyzda, maglumatlar çeşmesinden (klawiatura, faýl we ş.m.) gönüden-göni däl-de, buferden alynar we bu köp serişdäni tygşytlaýar. Munuň nähili işleýändigine düşünmek üçin, mysal üçin, uly bir kompaniýada kurýeriň işini göz öňüne getiriň. Kurýer ofisde otyr we posylkalaryň eltilmegine garaşýar. Her gezek täze bukjany alanda, derrew ýoly urup biler. Dayöne günüň dowamynda posylkalar köp bolup biler we her gezek ofis bilen salgylaryň arasynda gezmeli bolar. Muňa derek, kurýer ofisde her kimiň bukjasyny goýup biljek guty goýdy. Indi kurýer gutyny arkaýyn alyp, salgylara gidip biler - köp wagt tygşytlar, sebäbi her gezek ofisine gaýdyp gelmeli bolmaz. Bu mysaldaky guty takyk bufer, ofis bolsa maglumat çeşmesidir. Kurýer üçin eltilende umumy gutudan hat almak her gezek ofise gitmekden has aňsat. Şeýle hem gazy tygşytlar. Programmada edil şonuň ýaly - her gezek maglumat çeşmesine girmegiň ýerine, buferden maglumat almak gaty az serişde talap edýär. Şonuň üçin BufferedReader+ InputStreamReaderdiňe bir çalt işleýär InputStreamReader. Çykyşlary düzdük, ýöne amatlylyk hakda näme? Esasy artykmaçlygy, BufferedReadermaglumatlary bir gezekde diňe bir nyşan däl-de ( read()bu maksat bilen usuly bar bolsa-da), ähli setirleri hem okap biler! Bu ulanylýar 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);
   }
}
Konsol çykyşy:
JavaRush is the best site to learn Java!
Мы считали с клавиатуры эту строку:
JavaRush — лучший сайт для изучения Java!
Bu esasanam köp mukdarda maglumat okalanda peýdalydyr. Bir ýa-da iki setir teksti häzirem nyşan boýunça okap bolýar. Emma “Uruş we Parahatçylyk” bir gezekde bir harpy sanamak birneme kynçylyk çeker :) Indi sapaklaryň işi size has düşnükli boldy. Has giňişleýin öwrenmek üçin ine size goşmaça çeşme: Bu ýerde gelýän we çykýan akymlar hakda has köp maglumat alyp bilersiňiz. BufferedReaderTalyplarymyzyň birinden wideo syn . Hawa, hawa, okuwçylarymyz diňe bir özlerini öwrenmek bilen çäklenmän, başgalar üçin okuw wideolaryny hem ýazga alýarlar! Kanalymyzy halamagy we abuna ýazylmagy ýatdan çykarmaň :)
Okuwyň başyndan resmi resminamalary okamaga öwrenişmek has gowudyr. Dil baradaky esasy bilim çeşmesidir we jogaplaryň köpüsini hemişe şol ýerden tapyp bilersiňiz.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION