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

ทางเลือกนอกจาก BufferedReader

การอ่านคอนโซลที่รวดเร็วขึ้น

ทางเลือกนอกจาก BufferedReader เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวอ่านที่เร็วกว่า

Scanner ใช้งานสะดวก แต่ค่อนข้างช้าสำหรับข้อมูลป้อนเข้าปริมาณมาก สำหรับการอ่านข้อมูลจำนวนมาก BufferedReader จาก java.io จะเร็วกว่าอย่างมาก เพราะอ่านข้อมูลเป็นชุดใหญ่ในครั้งเดียว

การสร้าง BufferedReader

ห่อหุ้ม InputStreamReader รอบ System.in ภายใน BufferedReader ในที่นี้เราใช้ StringReader เพื่อให้ตัวอย่างทำงานได้โดยไม่ต้องพิมพ์ข้อมูลป้อนเข้า

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("Hello"));
        System.out.println(reader.readLine());
        reader.close();
    }
}

readLine คืนค่าเป็น String

readLine() อ่านทั้งบรรทัดเป็น String โดยไม่รวมตัวสิ้นสุดบรรทัด ต่างจาก Scanner ตรงที่จะคืนค่าข้อความเสมอ ดังนั้นคุณต้องแปลงตัวเลขด้วยตนเอง

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("first\nsecond"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

สิ้นสุดข้อมูลป้อนเข้าให้ค่าเป็นค่าว่าง

เมื่อไม่มีข้อมูลป้อนเข้าเหลืออยู่ readLine() จะคืนค่าเป็น null ซึ่งเป็นสัญญาณให้หยุดอ่านข้อมูล

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("one line"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

การอ่านทุกบรรทัด

วนซ้ำตราบใดที่ readLine() ไม่ใช่ null เพื่อประมวลผลทุกบรรทัดของข้อมูลป้อนเข้า

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("a\nb\nc"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("> " + line);
        }
        reader.close();
    }
}

แปลงตัวเลขด้วยตนเอง

เนื่องจาก readLine ให้ข้อความ คุณจึงต้องแปลงข้อความด้วย Integer.parseInt เมื่อต้องการตัวเลข

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("42"));
        int n = Integer.parseInt(reader.readLine().trim());
        System.out.println(n * 2);
        reader.close();
    }
}

แบ่งบรรทัดออกเป็นโทเคน

หากต้องการอ่านตัวเลขหลายตัวจากบรรทัดเดียว ให้แบ่งบรรทัดด้วย split แล้วแปลงแต่ละส่วน

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("10 20 30"));
        String[] parts = reader.readLine().split(" ");
        int sum = 0;
        for (String p : parts) {
            sum += Integer.parseInt(p);
        }
        System.out.println(sum);
        reader.close();
    }
}

ข้อยกเว้นที่ต้องตรวจสอบ

readLine ประกาศข้อยกเว้นที่ต้องตรวจสอบอย่าง IOException ดังนั้นคุณต้องประกาศ throws IOException หรือห่อหุ้มการเรียกใช้ไว้ในบล็อกลองและดักจับข้อผิดพลาด ส่วน Scanner ไม่จำเป็นต้องทำเช่นนี้

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new StringReader("data"));
            System.out.println(reader.readLine());
            reader.close();
        } catch (IOException e) {
            System.out.println("Read error");
        }
    }
}

การใช้ทรัพยากรพร้อมปิดอัตโนมัติ

ใช้รูปแบบการลองใช้ทรัพยากร เพื่อให้ตัวอ่านปิดโดยอัตโนมัติแม้จะเกิดข้อยกเว้น

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new StringReader("auto-closed"))) {
            System.out.println(reader.readLine());
        }
    }
}

ตัวอย่าง System.in จริง

สำหรับข้อมูลจากแป้นพิมพ์จริง ให้ห่อหุ้ม System.in ทดลองเรียกใช้ตัวอย่างนี้ในเครื่องของคุณ แล้วพิมพ์หนึ่งบรรทัดก่อนกด Enter

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter text: ");
        String input = reader.readLine();
        System.out.println("You typed: " + input);
    }
}

เปรียบเทียบ Scanner กับ BufferedReader

เลือกใช้ Scanner เมื่อให้ความสำคัญกับความสะดวกและการแปลงตัวเลขที่ง่าย เลือกใช้ BufferedReader เมื่อให้ความสำคัญกับความเร็วสำหรับข้อมูลป้อนเข้าปริมาณมาก โดยต้องแปลงข้อมูลและจัดการกับ IOException ด้วยตนเอง

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับ BufferedReader

ทบทวน

คุณได้เรียนรู้ทางเลือกอื่นนอกจาก BufferedReader แล้ว:

  • ห่อหุ้ม System.in ด้วย InputStreamReader แล้วจึงห่อหุ้มด้วย BufferedReader
  • readLine() คืนค่าทั้งบรรทัด หรือคืนค่า null เมื่อสิ้นสุดข้อมูลป้อนเข้า
  • แปลงตัวเลขด้วยตนเองโดยใช้ Integer.parseInt และ split
  • อาจทำให้เกิดข้อยกเว้นที่ต้องตรวจสอบอย่าง IOException จึงต้องจัดการหรือประกาศข้อยกเว้นนี้
  • ควรเลือกใช้แทน Scanner สำหรับข้อมูลป้อนเข้าขนาดใหญ่ที่ต้องเน้นประสิทธิภาพ

คำถามที่พบบ่อย

บทเรียน “ทางเลือกนอกจาก BufferedReader” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทางเลือกนอกจาก BufferedReader” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทางเลือกนอกจาก BufferedReader”

การอ่านคอนโซลที่รวดเร็วขึ้น คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ทางเลือกนอกจาก BufferedReader” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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