JavaRush /Blog Jawa /Random-JV /Laku nggarap kelas BufferedReader lan InputStreamReader

Laku nggarap kelas BufferedReader lan InputStreamReader

Diterbitake ing grup
Hello! Kuliah dina iki bakal dipérang dadi rong bagéan. Kita bakal mbaleni sawetara topik lawas sing wis kita demek sadurunge, lan ndeleng sawetara fitur anyar :) Laku nggarap kelas BuffreredReader lan InputStreamReader - 1Ayo dadi miwiti karo pisanan. Ambalan minangka ibu sinau :) Sampeyan wis nggunakake kelas kayata BufferedReader. Muga-muga sampeyan durung nglalekake prentah iki:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Sadurunge maca luwih lanjut, coba elinga apa System.in, InputStreamReader, BufferedReadertanggung jawab saben komponen ( ) lan apa sing dibutuhake. Kedadeyan? Yen ora, aja padha sumelang :) Yen ing titik iki sampeyan wis lali soko, maca maneh ceramah iki khusus kanggo maca maneh. Ayo padha ngelingi kanthi ringkes apa sing bisa ditindakake saben wong. System.inyaiku thread kanggo nampa data saka keyboard. Ing asas, kanggo ngleksanakake logika maca teks, siji bakal cukup kanggo kita. Nanging, yen sampeyan ngelingi, System.inmung bisa maca bita, dudu karakter:
public class Main {

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

       while (true) {
           int x = System.in.read();
           System.out.println(x);
       }
   }
}
Yen kita mbukak kode iki lan ngetik huruf "Y" ing console, output bakal kaya iki:

Й
208
153
10
Karakter Cyrillic manggoni 2 bait ing memori, sing ditampilake ing layar (lan angka 10 minangka perwakilan bait saka break baris, yaiku pencet Ketik). Maca bait minangka kesenengan, mula nggunakake System.ining wangun murni bakal ora trep. Kanggo maca huruf Cyrillic (lan ora mung) sing bisa dingerteni kabeh wong, kita nggunakake InputStreamReaderminangka bungkus:
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);
       }
   }
}
Yen kita ngetik huruf sing padha "Y" menyang console, asil wektu iki bakal beda:

Й
1049
10
InputStreamReaderdiowahi loro bait diwaca (208, 153) kanggo nomer siji 1049. Iki maca dening karakter. 1049 cocog karo huruf "Y", sing bisa diverifikasi kanthi gampang:
public class Main {

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

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

Й
Dadi, kanggo BufferedReader'a (lan umume - BufferedAnything), kelas buffered digunakake kanggo ngoptimalake kinerja. Ngakses sumber data (file, konsol, sumber daya ing Internet) minangka operasi sing rada larang babagan kinerja. Mulane, kanggo ngurangi jumlah panggilan kasebut, BufferedReadermaca lan nglumpukake data ing buffer khusus, saka ngendi kita bisa nampa. Akibaté, nomer telpon menyang sumber data suda kaping pirang-pirang utawa malah puluhan kaping! Fitur tambahan liyane saka BufferedReader'a lan kauntungan saka biasa InputStreamReader' iku cara banget migunani readLine()sing maca data minangka kabèh strings tinimbang minangka nomer individu. Iki, mesthi, nemen nambah penak nalika ngleksanakake, contone, teks gedhe. Iki bakal katon kaya maca baris:
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
Laku nggarap kelas BuffreredReader lan InputStreamReader - 2Mesthi, BufferedReaderiku mekanisme banget fleksibel lan ngijini sampeyan kanggo bisa ora mung karo keyboard. Sampeyan bisa maca data, contone, langsung saka Internet kanthi mung ngirim URL sing dibutuhake kanggo maca:
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();
   }
}
Sampeyan bisa maca data saka file kanthi ngliwati path menyang:
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();
   }
}

Substitusi saka System.out

Saiki ayo goleki siji kemungkinan menarik sing durung dideleng sadurunge. Sing mbokmenawa elinga, Systemana rong lapangan statis ing kelas - System.inlan System.out. Sedulur kembar iki minangka obyek kelas benang. System.in- kelas abstrak InputStream. System.outKelas A. PrintStream_ Saiki kita bakal ngomong khusus babagan System.out. Yen kita pindhah menyang kode sumber kelas System, kita bakal weruh iki:
public final class System {

……………...

public final static PrintStream out = null;

  …………

}
Dadi, System.outmung variabel kelas statis biasaSystem . Ora ana sihir :) Variabel kasebut outkalebu kelas PrintStream. Mangkene pitakonan sing menarik: kenapa, nalika ngeksekusi kode, System.out.println()output katon ing konsol lan ora ing papan liya? Lan iku bisa kanggo ngganti iki piye wae? Contone, kita pengin maca data saka console lan nulis menyang file teks. Apa bisa ngetrapake logika kasebut tanpa nggunakake kelas maca lan panulis tambahan, nanging mung nggunakake System.out? Isih sabisa :) Lan sanajan variabel kasebut System.outditemtokake dening modifier final, kita isih bisa nindakake! Laku nggarap kelas BuffreredReader lan InputStreamReader - 3Dadi apa sing kita butuhake kanggo iki? Kaping pisanan , kita butuh obyek kelas anyar PrintStreamtinimbang sing saiki. Obyek saiki sing diinstal ing kelas Systemminangka standar ora cocog karo kita: nuduhake console. Kita kudu nggawe anyar sing bakal nuding file teks minangka "tujuan" kanggo data kita. Kapindho , sampeyan kudu ngerti carane nemtokake nilai anyar menyang variabel System.out. Sampeyan ora bisa nindakake kaya ngono, amarga wis ditandhani final. Ayo miwiti saka pungkasan. Kelas Systemngemot persis cara sing kita butuhake - setOut(). Butuh obyek minangka input PrintStreamlan nyetel minangka titik output. Mung apa kita kudu! Kabeh sing isih ana yaiku nggawe obyek kasebut PrintStream. Iki uga gampang ditindakake:
PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
Kabeh kode bakal katon kaya iki:
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("А эта строка - в консоль!");
   }
}
Akibaté, baris pisanan bakal ditulis menyang file teks, lan kaloro bakal output kanggo console :) Sampeyan bisa nyalin kode iki kanggo IDE lan mbukak. Kanthi mbukak file teks, sampeyan bakal weruh baris sing dibutuhake wis kasil ditulis ing kana :) Iki nyimpulake kuliah. Dina iki kita eling carane bisa karo stream lan nonton, ngelingi carane padha beda-beda saka saben liyane lan sinau babagan fitur-fitur anyar System.outsing digunakake ing meh saben wulangan :) Sampai ketemu ing kuliah sabanjure!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION