0Pricing
Java Academy · บทเรียน

เหตุผลที่ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุผลที่ใช้ BufferedReader
  2. การอ่านทีละบรรทัด
  3. การแยกตัวเลขจากข้อมูลนำเข้า
  4. การปิดสตรีมอย่างปลอดภัย
← กลับไปที่ Java Academy