CodeGym /Blog Jawa /Acak /Laku nggarap kelas BuffreredReader lan InputStreamReader
John Squirrels
tingkat
San Francisco

Laku nggarap kelas BuffreredReader lan InputStreamReader

Diterbitake ing grup
Hi! Pawulangan ing dina iki bakal dipérang dadi rong bagéan kanggo penak. Kita bakal mbaleni sawetara topik lawas sing wis didemek sadurunge, lan kita bakal nimbang sawetara fitur anyar :) Ayo dadi miwiti karo pisanan. Sampeyan wis kelas kaya BufferedReaderkaping pirang-pirang. Muga-muga sampeyan ora duwe wektu kanggo nglalekake statement iki:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Sadurunge maca luwih, nyoba kanggo elinga apa saben komponen — System.in, InputStreamReader, BufferedReader— tanggung jawab kanggo lan apa iku perlu. Kowe eling? Yen ora, ora kuwatir. :) Yen sampeyan wis lali soko, waca maneh pawulangan iki , kang darmabakti kanggo kelas maca. Kita bakal ngelingi kanthi ringkes apa sing bisa ditindakake saben wong. System.in- iki minangka stream kanggo nampa data saka keyboard.  Ing asas, mung cukup kanggo ngetrapake logika sing dibutuhake kanggo maca teks. Nanging, sing bakal kelingan, 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 nglakokaké kode iki lan ngetik huruf Cyrillic "Й", output bakal:

Й
208
153
10 
Karakter Cyrillic manggoni 2 bait ing memori, lan padha ditampilake ing layar. Angka 10 minangka perwakilan desimal saka karakter feed baris, yaiku saka mencet Enter. Maca bita pancen nyenengake, mula nggunakake System.inora trep banget. Kanggo maca huruf Cyrillic (lan liyane) kanthi bener, kita nggunakake InputStreamReaderminangka pambungkus:

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); 
       } 
   } 
} 
Kita ngetik huruf sing padha "Й", nanging asile beda wektu iki:

Й 
1049 
10
InputStreamReaderdiowahi loro bita (208 lan 153) kanggo nomer siji 1049. Iki apa tegese maca karakter. 1049 cocog karo huruf Cyrillic "Й". Kita bisa kanthi gampang ngyakinake awake dhewe yen iki bener:

public class Main { 

   public static void main(String[] args) throws IOException { 
       char x = 1049; 
       System.out.println(x); 
   } 
} 
Output konsol:

Й
Lan minangka forBufferedReader(lan umume, BufferedAnythingYouWant), kelas buffered digunakake kanggo ngoptimalake kinerja. Ngakses sumber data (file, konsol, sumber web) cukup larang babagan kinerja. Mulane, kanggo ngurangi jumlah akses, BufferedReadermaca lan nglumpukake data ing buffer khusus, lan kita entuk saka kono. Akibaté, kaping pirang-pirang sumber data diakses dikurangi - bisa uga kanthi pirang-pirang urutan gedhene! Liyane siji saka BufferedReader's fitur lan kauntungan liwat biasa InputStreamReader, punika readLine()cara arang banget mbiyantu, kang maca kabeh baris data, ora nomer individu. Iki, mesthi, trep banget nalika nangani teks gedhe. Mangkene carane maca garis:

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 ("The user entered the following text:"); 
       System.out.println(s); 
       reader.close(); 
   } 
}

BufferedReader+InputStreamReader is faster than InputStreamReader alone 
The user entered the following text: 
BufferedReader+InputStreamReader is faster than InputStreamReader alone
Laku nggarap kelas BuffreredReader lan InputStreamReader - 2Mesthi, BufferedReaderbanget fleksibel. Sampeyan ora diwatesi kanggo nggarap keyboard. Contone, sampeyan bisa maca data langsung saka web, mung kanthi ngirim URL sing dibutuhake menyang 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 file:

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(); 
   } 
}

Ngganti System.out

Saiki ayo goleki kemampuan sing menarik sing durung didemek sadurunge. Nalika sampeyan mesthi ngelingi, Systemkelas duwe rong lapangan statis - System.inlan  System.out. Sedulur kembar iki minangka obyek stream. System.inyaiku an InputStream. Lan System.out minangka PrintStream. Saiki, kita bakal ngomong babagan  System.out. Yen kita nyelehake menyang Systemkode sumber kelas, kita bakal weruh iki:

public final class System { 
……………... 
public final static PrintStream out = null; 
 ………… 
} 
Mangkono,  System.out  iku mung variabel statis biasa sakaSystem kelas. Ora ana sing ajaib :) outVariabel kasebut minangka PrintStreamreferensi. Mangkene pitakonan sing menarik: Nalika System.out.println()dieksekusi, kenapa persis output menyang konsol lan ora ing papan liya? Lan iki bisa diganti piye wae? Contone, umpamane kita pengin maca data saka konsol lan nulis menyang file teks. Apa bisa nindakake iki kanthi nggunakake  System.outtinimbang kelas maca lan panulis tambahan? Pancen, iku :) Lan kita bisa nindakake sanajan System.outvariabel kasebut ditandhani karo finalmodifier!  Laku nggarap kelas BuffreredReader lan InputStreamReader - 3Dadi, apa sing kudu ditindakake supaya kedadeyan kasebut? Kaping pisanan, kita butuh PrintStreamobyek anyar kanggo ngganti sing saiki. Obyek saiki, disetel ingSystemkelas minangka standar, ora ngawula tujuan kita: nuduhake console. Sampeyan kudu nggawe sing anyar sing nuduhake file teks - "tujuan" kanggo data kita. Kapindho, kita kudu ngerti carane nemtokake nilai anyar menyang System.outvariabel. Sampeyan ora bisa nggunakake operator assignment prasaja, amarga variabel ditandhani final. Ayo kerja mundur saka mburi. Minangka mengkono, Systemkelas wis cara kita kudu setOut():. Butuh PrintStreamobyek lan nyetel minangka tujuan kanggo output. Iku mung sing kita butuhake! Kabeh sing isih ana yaiku nggawe PrintStreamobyek. Iki uga gampang:

PrintStream filePrintStream = new PrintStream(new File("C:\\Users\\Username\\Desktop\\test.txt"));
Kode lengkap 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"));
       /* Save the current value of System.out in a separate variable so that later 
       we can switch back to console output */ 

       PrintStream console = System.out; 
       // Assign a new value to System.out 
       System.setOut(filePrintStream); 
       System.out.println("This line will be written to the text file"); 

       // Restore the old value of System.out 
       System.setOut(console); 
       System.out.println("But this line will be output to the console!"); 
   } 
}
Akibaté, senar pisanan ditulis ing file teks, lan kaloro ditampilake ing console :) Sampeyan bisa nyalin kode iki menyang IDE lan mbukak. Bukak file teks lan sampeyan bakal weruh yen senar wis kasil ditulis ing kono :) Kanthi iki, pelajaran kita wis rampung. Dina iki kita kelingan carane bisa karo stream lan maca. We recollected carane padha beda-beda saka siji liyane lan sinau bab sawetara kabisan anyar saka System.out, kang wis digunakake ing meh saben pawulangan :) Nganti pawulangan sabanjuré!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION