ทางเลือกนอกจาก 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านข้อมูลนำเข้าด้วย Scanner
- การอ่านตัวเลขและบรรทัด
- การตรวจสอบข้อมูลนำเข้าจากผู้ใช้
- ทางเลือกนอกจาก BufferedReader