Scanner และ BufferReader ทั้งสองคลาสใช้ในการอ่านอินพุตจากระบบภายนอก โดยปกติสแกนเนอร์จะใช้เมื่อเราทราบว่าอินพุตเป็นสตริงประเภทหรือประเภทดั้งเดิม และ BufferReader ใช้เพื่ออ่านข้อความจากสตรีมอักขระในขณะที่บัฟเฟอร์อักขระเพื่อการอ่านอักขระอย่างมีประสิทธิภาพ ต่อไปนี้เป็นข้อแตกต่างที่สำคัญระหว่างคลาส Scanner และคลาส BufferReader
ซีเนียร์ เลขที่ | Key | คลาสเครื่องสแกนเนอร์ | BufferReader Class |
---|---|---|---|
1 | ซิงโครนัส | Scanner ไม่ซิงโครไนซ์ในธรรมชาติ และควรใช้เฉพาะในกรณีเธรดเดียวเท่านั้น | BufferReader มีความซิงโครไนซ์ในธรรมชาติ ระหว่างสภาวะแวดล้อมแบบมัลติเธรด ควรใช้ BufferReader |
2 | หน่วยความจำบัฟเฟอร์ | เครื่องสแกนเนอร์มีบัฟเฟอร์ขนาดเล็ก 1 KB ถ่านบัฟเฟอร์ | BufferReader มีบัฟเฟอร์ขนาดใหญ่ 8KB byte Buffer เมื่อเปรียบเทียบกับ Scanner |
3 | ความเร็วในการประมวลผล | เครื่องสแกนทำงานช้าลงเล็กน้อยเนื่องจากจำเป็นต้องแยกวิเคราะห์ข้อมูลด้วย | BufferReader เร็วกว่า Scanner เนื่องจากอ่านเฉพาะสตรีมอักขระ |
4 | วิธีการ | Scanner มีเมธอดเช่น nextInt(), nextShort() เป็นต้น | BufferReader มีเมธอดเช่น parseInt(), parseShort() เป็นต้น |
5 | อ่านบรรทัด | Scanner มีเมธอด nextLine() เพื่ออ่านบรรทัด | BufferReader มีเมธอด readLine() เพื่ออ่านบรรทัด |
ตัวอย่างเครื่องสแกนเนอร์เทียบกับ BufferReader
JavaTester.java
<ก่อนหน้า> นำเข้า java.io.BufferedReader; นำเข้า java.io.IOException; นำเข้า java.io.InputStreamReader นำเข้า java.util.Scanner; JavaTester คลาสสาธารณะ { โมฆะคงที่สาธารณะหลัก (สตริง args []) พ่น NumberFormatException, IOException { BufferedReader bufferReader =BufferedReader ใหม่ (ใหม่ InputStreamReader (System.in)); System.out.println("ป้อนหมายเลข:"); int a =Integer.parseInt(bufferReader.readLine()); System.out.printf("คุณป้อน:" + a); สแกนเนอร์สแกนเนอร์ =สแกนเนอร์ใหม่ (System.in); System.out.println("\nป้อนหมายเลข:"); a =scanner.nextInt(); System.out.printf("คุณป้อน:" + a); }}ผลลัพธ์
ป้อนตัวเลข:1คุณป้อน:1ป้อนหมายเลข:2คุณป้อน:2