Salam! Şu günki leksiýa iki bölege bölüner. Öň degip geçen käbir köne temalary gaýtalarys we käbir täze aýratynlyklara serederis :) Birinjisinden başlalyň. Gaýtalama öwrenmegiň enesi :) Siz eýýäm şeýle synpy ulandyňyz
BufferedReader
. Bu buýrugy entek ýatdan çykarmarsyňyz diýip umyt edýärin:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.in, InputStreamReader, BufferedReader
Has giňişleýin okamagyňyzdan ozal her bir komponentiň ( ) nämäniň jogapkärdigini we nämä mätäçdigini ýadyňyzdan çykarmaga synanyşyň . Näme boldy? Notok bolsa, alada etme :) Şu wagta çenli bir zady ýatdan çykaran bolsaň, okyjylara bagyşlanan bu leksiýany täzeden oka . Olaryň hersiniň edip biljek zatlaryny gysgaça ýada salalyň. System.in
klawiaturadan maglumat almak üçin sapakdyr. Aslynda, teksti okamagyň logikasyny durmuşa geçirmek üçin biri bize ýeterlikdi. , Öne ýadyňyzda bolsa, System.in
simwollary däl-de, diňe baýtlary okap biler:
public class Main {
public static void main(String[] args) throws IOException {
while (true) {
int x = System.in.read();
System.out.println(x);
}
}
}
Bu kody işledip, konsola "Y" harpyny girizsek, çykyş şeýle bolar:
Й
208
153
10
Kiril nyşanlary ekranda görkezilýän ýatda 2 baýt tutýar (we 10 belgisi, setir arakesmesiniň baýt görnüşi, ýagny Enter basmak). Baýt okamak şeýle bir lezzet, şonuň üçin ony System.in
arassa görnüşinde ulanmak amatsyz bolar. Her kim üçin düşnükli kiril (we diňe däl) harplary okamak üçin, InputStreamReader
örtük hökmünde ulanýarys:
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);
}
}
}
Şol bir “Y” harpyny konsola girizsek, bu gezek netije başgaça bolar:
Й
1049
10
InputStreamReader
iki okalýan baýt (208, 153) -ni bir belgä 1049-a öwürdi. Muny simwollar okaýar. 1049 aňsatlyk bilen barlap boljak “Y” harpyna gabat gelýär:
public class Main {
public static void main(String[] args) throws IOException {
char x = 1049;
System.out.println(x);
}
}
Konsol çykyşy:
Й
Dogrusy, BufferedReader
'a (we umuman - BufferedAnything) barada aýdylanda bolsa, öndürijiligi optimizirlemek üçin buferlenen synplar ulanylýar. Maglumat çeşmesine (faýl, konsol, internetdäki çeşme) girmek öndürijilik taýdan gaty gymmat iş. Şonuň üçin şeýle jaňlaryň sanyny azaltmak üçin BufferedReader
maglumatlary ýörite buferde okaýar we ýygnaýar, soňundan alyp bileris. Netijede, maglumat çeşmesine edilýän jaňlaryň sany birnäçe esse, hatda onlarça esse azalýar! BufferedReader
“A we yzygiderli artykmaçlygy ” -nyň başga bir aýratynlygy, maglumatlary aýratyn sanlar däl-de, tutuş setirler ýaly okaýan InputStreamReader
örän peýdaly usuldyr . readLine()
Bu, elbetde, uly tekst ýerine ýetirilende amatlylygy hasam artdyrýar. Bir setiri okamak şeýle bolar:
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("Пользователь ввел следующий текст:");
System.out.println(s);
reader.close();
}
}
BufferedReader+InputStreamReader работает быстрее, чем просто InputStreamReader
Пользователь ввел следующий текст:
BufferedReader+InputStreamReader работает быстрее, чем просто InputStreamReader
Elbetde, BufferedReader
bu örän çeýe mehanizm bolup, diňe klawiatura bilen işlemäge mümkinçilik berýär. Mysal üçin, zerur URL-ni okyja geçirip, maglumatlary internetden gönüden-göni okap bilersiňiz:
public class URLReader {
public static void main(String[] args) throws Exception {
URL oracle = new URL("https://www.oracle.com/index.html");
BufferedReader in = new BufferedReader(
new InputStreamReader(oracle.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
Maglumatlary bir faýldan oňa geçip okap bilersiňiz:
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream = new FileInputStream("testFile.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
String str;
while ((str = reader.readLine()) != null) {
System.out.println (str);
}
reader.close();
}
}
System.out-yň çalyşmagy
Indi bolsa ozal degmedik bir gyzykly mümkinçiligimize seredeliň. Probablyadyňyzda bolsa,System
synpda iki sany statiki meýdan bar - System.in
we System.out
. Bu ekiz doganlar sapak synpydyr. System.in
- abstrakt synp InputStream
. A System.out
- synp PrintStream
. Indi bu barada aýratyn gürleşeris System.out
. Synpyň deslapky kodyna girsek System
, muny göreris:
public final class System {
……………...
public final static PrintStream out = null;
…………
}
Şeýlelikde, System.out
diňe adaty statiki synp üýtgeýjisiSystem
. Onda jady ýok :) Üýtgeýji out
synpa degişlidir PrintStream
. Ine gyzykly bir sorag: näme üçin kod ýerine ýetirilende System.out.println()
çykyş başga bir ýerde däl-de, konsolda peýda bolýar? Muny nädip üýtgedip bolarmy? Mysal üçin, konsoldan maglumatlary okamak we tekst faýlyna ýazmak isleýäris. Şeýle logikany goşmaça okyjy we ýazyjy sapaklaryny ulanman, diňe ulanyp bilersiňizmi System.out
? Mümkin boldugyça :) Üýtgeýji System.out
üýtgediji tarapyndan bellenen hem bolsa final
, biz muny edip bileris! Munuň üçin bize näme gerek? Ilki bilenPrintStream
, häzirki ýerine derek täze synp obýekti gerek . Synpda gurnalan häzirki obýekt System
bize laýyk gelmeýär: konsoly görkezýär. Tekst faýlyny maglumatlarymyzyň “barjak ýeri” hökmünde görkezjek täzesini döretmeli. Ikinjiden , üýtgeýjä täze bahany nädip bellemelidigine düşünmeli System.out
. Diňe beýle edip bilmersiňiz, sebäbi bellik edildi final
. Soňundan başlalyň. Synpda System
bize zerur usul bar - setOut()
. Bir obýekti giriş hökmünde alýar PrintStream
we çykyş nokady hökmünde kesgitleýär. Diňe bize gerek zat! Galan zat obýekti döretmekdir PrintStream
. Muny etmek hem aňsat:
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
Codehli kod şeýle bolar:
public class SystemRedirectService {
public static void main(String arr[]) throws FileNotFoundException
{
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
/*Сохраним текущее meaning System.out в отдельную переменную, чтобы потом
можно было переключиться обратно на вывод в консоль*/
PrintStream console = System.out;
// Присваиваем System.out новое meaning
System.setOut(filePrintStream);
System.out.println("Эта строка будет записана в текстовый файл");
// Возвращаем System.out старое meaning
System.setOut(console);
System.out.println("А эта строка - в консоль!");
}
}
Netijede, birinji setir tekst faýlyna ýazylar, ikinjisi bolsa konsola çykar :) Bu kody IDE-ä göçürip alyp bilersiňiz. Tekst faýlyny açmak bilen, zerur setiriň üstünlikli ýazylandygyny görersiňiz :) Bu leksiýany tamamlaýar. Bu gün akymlar we okyjylar bilen nähili işlemelidigimizi ýada saldyk, biri-birinden nähili tapawutlanýandyklaryny ýada saldyk we System.out
her sapakda diýen ýaly ulanan täze aýratynlyklarymyzy öwrendik :) Indiki leksiýalarda görüşeris!
GO TO FULL VERSION