เหตุผลที่ใช้ BufferedReader
การอ่านแบบมีบัฟเฟอร์และไม่มีบัฟเฟอร์
เหตุผลที่ใช้ BufferedReader เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การอ่านข้อมูลเข้าใน Java
โปรแกรมจริงส่วนใหญ่ต้องรับข้อมูลเข้าจากผู้ใช้ เช่น ชื่อ ตัวเลข หรือคำสั่ง Java มีวิธีอ่านข้อมูลเข้าหลายวิธี แต่วิธีหนึ่งที่ใช้กันแพร่หลายและมีประสิทธิภาพคือ BufferedReader
ในบทเรียนนี้ คุณจะได้เรียนรู้ว่า เหตุใดจึงมี BufferedReader และควรเลือกใช้เมื่อใด
ข้อมูลเข้ามาจากที่ใด
เมื่อคุณพิมพ์ข้อมูลลงในคอนโซล ข้อความจะไหลเข้ามาทาง System.in ซึ่งเป็นกระแสข้อมูลไบต์ระดับต่ำ จึงให้ไบต์ดิบ ไม่ใช่ข้อความที่อ่านได้สะดวก
ในการแปลงไบต์เหล่านั้นเป็นอักขระและบรรทัดที่อ่านได้ เราจะใช้คลาสตัวช่วยห่อหุ้ม System.in ไว้ โดย BufferedReader คือคลาสห่อหุ้มที่ทำให้เรื่องนี้ง่ายขึ้น
ความหมายของ Buffered
การอ่านทีละไบต์จากแป้นพิมพ์หรือไฟล์นั้นช้า บัฟเฟอร์คือหน่วยความจำส่วนหนึ่งที่เก็บอักขระจำนวนมากไว้พร้อมกัน
BufferedReader จะเติมข้อมูลลงในบัฟเฟอร์ครั้งละมาก ๆ แล้วส่งข้อมูลให้คุณได้อย่างรวดเร็ว การติดต่อกับกระแสข้อมูลเบื้องหลังน้อยลงจึงทำให้ประสิทธิภาพดีขึ้น โดยเฉพาะเมื่อมีข้อมูลเข้าจำนวนมาก
การตั้งค่าแบบสองชั้น
BufferedReader ไม่สามารถอ่าน System.in ได้โดยตรง เพราะกระแสข้อมูลนี้ให้ไบต์ ก่อนอื่นเราจึงห่อหุ้มมันด้วย InputStreamReader ซึ่งแปลงไบต์เป็นอักขระ
System.in→ ไบต์InputStreamReader→ อักขระBufferedReader→ บรรทัดที่ผ่านบัฟเฟอร์
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);คำสั่งบรรทัดเดียวแบบคลาสสิก
คุณจะเห็นบรรทัดนี้ในโปรแกรม Java เกือบทุกโปรแกรมที่อ่านข้อมูลเข้าจากคอนโซล โดยเป็นการเชื่อมคลาสห่อหุ้มทั้งสองเข้าด้วยกันในคำสั่งเดียว
โปรดจำไว้ว่า InputStreamReader ชั้นในจัดการการแปลงไบต์เป็นอักขระ ส่วน BufferedReader ชั้นนอกจะเพิ่มการใช้บัฟเฟอร์และเมธอด readLine() ที่สะดวกให้
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));การนำเข้าที่จำเป็น
คลาสเหล่านี้อยู่ในแพ็กเกจ java.io ดังนั้นคุณต้องนำเข้าคลาสเหล่านี้ไว้ด้านบนของไฟล์
การอ่านข้อมูลเข้าอาจล้มเหลวได้ ดังนั้นเมธอดจึงโยน IOException คุณจะต้องนำเข้าหรือจัดการข้อผิดพลาดนี้ด้วย ซึ่งเราจะกล่าวถึงในภายหลัง
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;BufferedReader กับ Scanner
ผู้เริ่มต้นมักพบ Scanner ก่อน เพราะใช้งานง่ายกว่า (สามารถแปลงตัวเลขได้โดยตรง) แต่ทำงานช้ากว่า
- Scanner: แปลงค่าได้ง่าย แต่มีค่าใช้จ่ายในการทำงานมากกว่า
- BufferedReader: ทำงานเร็วกว่า อ่านทีละบรรทัดทั้งหมด แต่คุณต้องแปลงตัวเลขด้วยตนเอง
สำหรับข้อมูลเข้าจำนวนมากหรือการเขียนโปรแกรมแข่งขัน BufferedReader มีความเร็วเหนือกว่า
การอ่านทั้งบรรทัด
เมธอดหลักคือ readLine() เมธอดนี้อ่านทุกสิ่งที่ผู้ใช้พิมพ์จนกว่าจะกด Enter แล้วส่งคืนเป็น String (โดยไม่มีอักขระขึ้นบรรทัดใหม่)
หากไม่มีข้อมูลเข้าเหลืออยู่ readLine() จะส่งคืนค่า null เราจะศึกษาเรื่องนี้ในบทเรียนถัดไป
String name = br.readLine();
System.out.println("Hello, " + name);โปรแกรมอ่านข้อมูลฉบับสมบูรณ์
นี่คือโปรแกรมฉบับสมบูรณ์ที่อ่านหนึ่งบรรทัดแล้วกล่าวทักทายผู้ใช้ โปรดสังเกต throws IOException บน main ซึ่งเป็นวิธีอย่างรวดเร็วในการปล่อยให้ข้อผิดพลาดจากการอ่านข้อมูลเข้าไหลขึ้นไปขณะเรียนรู้
โค้ดตัวอย่างนี้รอข้อมูลเข้าจากแป้นพิมพ์ จึงไม่สามารถรันอัตโนมัติที่นี่ได้ แต่เป็น Java ที่ถูกต้อง
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
System.out.println("Hi " + name);
}
}ไม่ต้องมีข้อมูลเข้าก็พิสูจน์การทำงานได้
เพื่อดูว่าคลาสห่อหุ้มเหล่านี้มีอยู่จริงและคอมไพล์ได้ นี่คือรุ่นที่รันได้โดยไม่อ่านข้อมูลใด ๆ แต่ยืนยันเพียงว่าวัตถุถูกสร้างขึ้นแล้ว
ในแอปจริง คุณจะเรียกใช้ readLine() แต่รุ่นนี้จะแสดงข้อความเพื่อให้คุณรันได้ทันที
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("BufferedReader is ready!");
}
}ควรใช้ BufferedReader เมื่อใด
เลือกใช้ BufferedReader เมื่อคุณต้องการ:
- อ่านหลายบรรทัดหรือไฟล์ขนาดใหญ่
- ให้ความสำคัญกับความเร็ว
- อ่านข้อความอย่างง่ายทีละบรรทัด
ให้ใช้ Scanner แทนเมื่อคุณต้องการแปลงตัวเลขอย่างรวดเร็วและข้อมูลเข้ามีขนาดเล็ก ทั้งสองวิธีใช้ได้ เลือกเครื่องมือให้เหมาะกับงาน
ตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับการตั้งค่า BufferedReader
สรุปทบทวน
คุณได้เรียนรู้ว่า System.in เป็นกระแสข้อมูลไบต์ ซึ่งห่อหุ้มด้วย InputStreamReader (แปลงไบต์เป็นอักขระ) แล้วห่อหุ้มต่อด้วย BufferedReader (ใช้บัฟเฟอร์และมี readLine())
การใช้บัฟเฟอร์ช่วยเพิ่มประสิทธิภาพ และ BufferedReader เหมาะอย่างยิ่งกับข้อมูลเข้าขนาดใหญ่หรือข้อมูลเข้าที่แบ่งเป็นบรรทัด ถัดไป: การอ่านบรรทัดโดยละเอียด
คำถามที่พบบ่อย
บทเรียน “เหตุผลที่ใช้ BufferedReader” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เหตุผลที่ใช้ BufferedReader” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เหตุผลที่ใช้ BufferedReader”
การอ่านแบบมีบัฟเฟอร์และไม่มีบัฟเฟอร์ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “เหตุผลที่ใช้ BufferedReader” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ใช้ BufferedReader
- การอ่านทีละบรรทัด
- การแยกตัวเลขจากข้อมูลนำเข้า
- การปิดสตรีมอย่างปลอดภัย