JavaRush /Java Blog /Random-TK /“BufferedReader” we “InputStreamReader” sapaklary bilen i...

“BufferedReader” we “InputStreamReader” sapaklary bilen işlemek

Toparda çap edildi
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 :) “BuffreredReader” we “InputStreamReader” sapaklary bilen işlemek bilen meşgullan - 1Birinjisinden 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, BufferedReaderHas 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.inklawiaturadan maglumat almak üçin sapakdyr. Aslynda, teksti okamagyň logikasyny durmuşa geçirmek üçin biri bize ýeterlikdi. , Öne ýadyňyzda bolsa, System.insimwollary 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.inarassa 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
InputStreamReaderiki 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 BufferedReadermaglumatlary ýö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
“BuffreredReader” we “InputStreamReader” sapaklary bilen işlemek bilen meşgullan - 2Elbetde, BufferedReaderbu ö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, Systemsynpda iki sany statiki meýdan bar - System.inwe 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.outdiňe adaty statiki synp üýtgeýjisiSystem . Onda jady ýok :) Üýtgeýji outsynpa 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! “BuffreredReader” we “InputStreamReader” sapaklary bilen işlemek bilen meşgullan - 3Munuň üçin bize näme gerek? Ilki bilenPrintStream , häzirki ýerine derek täze synp obýekti gerek . Synpda gurnalan häzirki obýekt Systembize 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 Systembize zerur usul bar - setOut(). Bir obýekti giriş hökmünde alýar PrintStreamwe ç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.outher sapakda diýen ýaly ulanan täze aýratynlyklarymyzy öwrendik :) Indiki leksiýalarda görüşeris!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION