ก่อนอื่นให้ฉันแนะนำความแตกต่างระหว่าง InputStreamReader และ FileReader เนื้อหาเฉพาะมีดังนี้:
InputStreamReader และ BufferedReader คลาสที่สำคัญที่สุดในหมู่พวกเขาคือ InputStreamReader ซึ่งเป็นบริดจ์สำหรับการแปลงไบต์เป็นอักขระ คุณสามารถระบุวิธีการเข้ารหัสใหม่ในตัวสร้าง หากไม่ได้ระบุวิธีการเข้ารหัสเริ่มต้นของระบบปฏิบัติการพื้นฐานจะถูกนำมาใช้เช่น GBK ฯลฯ
Filereader และ InputStreamReader เกี่ยวข้องกับการเข้ารหัสการแปลง (ระบุวิธีการเข้ารหัสหรือใช้การเข้ารหัสระบบปฏิบัติการเริ่มต้น) และรหัสที่อ่านไม่ออกอาจเกิดขึ้นบนแพลตฟอร์มที่แตกต่างกัน! FileInputStream ถูกประมวลผลในโหมดไบนารีและจะไม่มีรหัสที่อ่านไม่ออก
สตรีมไบต์ FileInputStream ถูกอ่านไบต์ไบต์
สตรีมอักขระ filereader ถูกอ่านเป็นอักขระทีละตัว
bufferedReader bufreader = null; inputstreamreader isr = null; filereader fr = null; ลอง {สำหรับ (สตริงไฟล์ชื่อ: filenames) {วิธีการ 1: isr = new inputStreamReader (ใหม่ fileInputStream ("d: /test.txt"), "utf-8"); bufreader = ใหม่ bufferedReader (ISR); วิธีที่ 2: fr = filereader ใหม่ ("d: /test.txt"); bufreader = new bufferedReader (FR); ในขณะที่ (bufreader.ready ()) {// 1 รับแต่ละแถวของ data string dataline = bufreader.readline (); -ความแตกต่างระหว่าง InputStream และ Reader
มีสองคลาสนามธรรมด้านล่าง java.io: InputStream และ Reader
InputStream เป็น superclass ที่แสดงคลาสทั้งหมดของสตรีมอินพุตไบต์
ผู้อ่านเป็นคลาสนามธรรมสำหรับการอ่านสตรีมอักขระ
InputStream ให้การอ่านสตรีมไบต์ไม่ใช่การอ่านข้อความซึ่งเป็นความแตกต่างพื้นฐานระหว่างมันกับคลาสผู้อ่าน
นั่นคือการอ่านอาร์เรย์ถ่านหรือสตริงโดยใช้เครื่องอ่านและอาร์เรย์ไบต์จะอ่านโดยใช้อินพุตสตรีม
หลังจากชี้แจงความแตกต่างพื้นฐานระหว่างสองซูเปอร์คลาสแล้วให้ดูที่การใช้คลาสย่อยของพวกเขาด้านล่าง นี่เป็นคำอธิบายที่ใช้กันมากที่สุดเพียงไม่กี่ข้อ
อินพุตสตรีม
- __fileinputstream
FileInputStream รับอินพุตไบต์จากไฟล์ในระบบไฟล์
สรุปวิธีการก่อสร้าง
FileInputStream (ไฟล์ไฟล์)
สร้าง FileInputStream โดยการเปิดการเชื่อมต่อกับไฟล์จริงซึ่งระบุโดยไฟล์วัตถุไฟล์ในระบบไฟล์
FileInputStream (FileDescriptor FDOBJ)
สร้าง FileInputStream โดยใช้ไฟล์ Descriptor FDOBJ ซึ่งแสดงถึงการเชื่อมต่อที่มีอยู่กับไฟล์จริงในระบบไฟล์
FileInputStream (ชื่อสตริง)
สร้าง FileInputStream โดยเปิดการเชื่อมต่อกับไฟล์จริงที่ระบุโดยชื่อพา ธ ในระบบไฟล์
ผู้อ่าน
|-bufferedreader
| ___ InputStreamReader
| __filereader
BufferedReader: อ่านข้อความจากสตรีมอินพุตอักขระและบัฟเฟอร์ตัวละครแต่ละตัวจึงช่วยให้การอ่านอักขระอาร์เรย์และบรรทัดมีประสิทธิภาพ
สรุปวิธีการก่อสร้าง
BufferedReader (ผู้อ่านใน)
สร้างสตรีมอินพุตอักขระบัฟเฟอร์ที่ใช้บัฟเฟอร์อินพุตขนาดเริ่มต้น
BufferedReader (Reader In, Int SZ)
สร้างสตรีมอินพุตอักขระบัฟเฟอร์ที่ใช้บัฟเฟอร์อินพุตขนาดที่ระบุ
BufferedReader (Java Platform SE 6)
คุณสมบัติที่ใหญ่ที่สุดของ BufferedReader คือการตั้งค่าบัฟเฟอร์ โดยปกติแล้วคำขออ่านทุกครั้งที่ทำโดยผู้อ่านจะส่งผลให้มีการร้องขอการอ่านที่สอดคล้องกันสำหรับอักขระพื้นฐานหรือสตรีมไบต์ หากไม่มีการบัฟเฟอร์การโทรแต่ละครั้งเพื่ออ่าน () หรือ readline () จะส่งผลให้ไบต์อ่านจากไฟล์และแปลงเป็นอักขระและส่งคืนซึ่งไม่มีประสิทธิภาพมาก
ใช้ bufferedReader เพื่อระบุขนาดของบัฟเฟอร์หรือขนาดเริ่มต้นสามารถใช้ ในกรณีส่วนใหญ่ค่าเริ่มต้นมีขนาดใหญ่พอ
ดังนั้นจึงขอแนะนำให้ห่อผู้อ่านทั้งหมดที่มีการอ่าน () การดำเนินการอาจมีราคาแพง (เช่น filereader และ inputstreamreader) ด้วย bufferedreader
ตัวอย่างเช่น,
bufferedReader in = new bufferedReader (ใหม่ filereader ("foo.in"));อินพุตบัฟเฟอร์ไปยังไฟล์ที่ระบุ
InputStreamReader (แพลตฟอร์ม Java SE 6)
InputStreamReader เป็นบริดจ์ระหว่างสตรีมไบต์และสตรีมอักขระ: มันอ่านไบต์โดยใช้ charset ที่ระบุและถอดรหัสเป็นอักขระ ชุดอักขระที่ใช้สามารถระบุหรือระบุอย่างชัดเจนโดยชื่อหรือสามารถยอมรับชุดอักขระเริ่มต้นของแพลตฟอร์ม
สรุปวิธีการก่อสร้าง
InputStreamReader (InputStream In) สร้าง InputStreamReader ที่ใช้ชุดอักขระเริ่มต้น InputStreamReader (InputStream In, Charset CS) สร้าง InputStreamReader ที่ใช้ชุดอักขระที่กำหนด InputStreamReader (InputStream In, CharsetDecoder DEC) สร้าง InputStreamReader ที่ใช้ตัวถอดรหัสชุดอักขระที่กำหนด InputStreamReader (inputStream in, charsetName สตริง) สร้าง InputStreamReader ที่ใช้ชุดอักขระที่ระบุ
การโทรแต่ละครั้งไปยังวิธีการอ่าน () ในอินพุทสตรีมรีดจะส่งผลให้หนึ่งไบต์หรือมากกว่านั้นถูกอ่านจากสตรีมอินพุตพื้นฐาน เพื่อเปิดใช้งานการแปลงที่มีประสิทธิภาพจากไบต์เป็นอักขระคุณสามารถอ่านไบต์เพิ่มเติมจากกระแสข้อมูลล่วงหน้าเกินกว่าไบต์ที่จำเป็นเพื่อตอบสนองการดำเนินการอ่านปัจจุบัน
เพื่อให้ได้ประสิทธิภาพสูงสุดให้พิจารณาห่อ InputStreamReader ภายใน bufferedReader ตัวอย่างเช่น:
bufferedReader in = new bufferedReader (ใหม่ inputStreamReader (system.in));
คุณลักษณะที่ใหญ่ที่สุดของ InputStreamReader คือสามารถอ้างถึงรูปแบบการเข้ารหัสคงที่ของการแปลงซึ่งเป็นไปไม่ได้กับคลาสอื่น ๆ มันสามารถเห็นได้จากวิธีการก่อสร้าง สิ่งนี้มีประโยชน์มากเมื่ออ่านตัวละครจีน
ผู้ส่ง
1) บทนำสู่ชั้นเรียน Filereader:
คลาสย่อยของคลาส InputStreamReader, ทุกวิธี (read (), ฯลฯ ) ได้รับการสืบทอดจากคลาสพาเรนต์อินพุทสตรีมรีดเนอร์;
2) ความแตกต่างจากคลาส InputStreamReader:
สรุปวิธีการก่อสร้าง
filereader (ไฟล์ไฟล์)
สร้าง filereader ใหม่ที่ได้รับไฟล์ที่อ่านข้อมูล
Filereader (Filedescriptor FD)
สร้าง filereader ใหม่ที่ได้รับ filedescriptor ซึ่งข้อมูลถูกอ่าน
filereader (ชื่อไฟล์สตริง)
สร้าง filereader ใหม่ที่ได้รับชื่อไฟล์ที่อ่านข้อมูล
ความแตกต่างที่สำคัญระหว่างคลาสนี้และคลาสพาเรนต์อินพุทสตรีมอ่านคือตัวสร้างและความแตกต่างหลักคือตัวสร้าง!
จากตัวสร้างของ InputStreamReader พารามิเตอร์คือ InputStream และวิธีการเข้ารหัส จะเห็นได้ว่าเมื่อคุณต้องการระบุวิธีการเข้ารหัสจะต้องใช้คลาส InputStreamReader และพารามิเตอร์ของตัวสร้าง filereader นั้นเหมือนกับ FileInputStream ซึ่งเป็นวัตถุไฟล์หรือสตริงที่แสดงถึงเส้นทาง จะเห็นได้ว่าเมื่อคุณต้องการอ่านไฟล์ตามวัตถุหรือสตริงไฟล์ให้ใช้ filereader;
ฉันคิดว่าฟังก์ชั่นของ subclass filereader อยู่ในแผนกแรงงานขนาดเล็กนี้ ความแตกต่างที่สำคัญระหว่างคลาสนี้และคลาสพาเรนต์อินพุทสตรีมอ่านคือตัวสร้างและความแตกต่างหลักคือตัวสร้าง!
จาก InputStreamReader
ในคอนสตรัคเตอร์พารามิเตอร์เป็นอินพุตและวิธีการเข้ารหัส จะเห็นได้ว่าเมื่อคุณต้องการระบุวิธีการเข้ารหัสจะต้องใช้คลาส InputStreamReader และพารามิเตอร์ของตัวสร้าง filereader นั้นเหมือนกับ FileInputStream ซึ่งเป็นวัตถุไฟล์หรือสตริงที่แสดงถึงเส้นทาง จะเห็นได้ว่าเมื่อคุณต้องการอ่านไฟล์ตามวัตถุหรือสตริงไฟล์ให้ใช้ filereader;
ฉันคิดว่าฟังก์ชั่นของ subclass filereader อยู่ในแผนกแรงงานขนาดเล็กนี้
การเชื่อมต่อและความแตกต่างสองครั้ง
(1) อักขระและไบต์:
คลาส FileInputStream ใช้อินพุต/เอาต์พุตไบนารีและความเร็ว I/O นั้นรวดเร็วและมีประสิทธิภาพ แต่วิธีการอ่าน () ของมันอ่านไบต์ (ข้อมูลไบนารี) ซึ่งไม่เอื้ออำนวยต่อการอ่านและไม่สามารถทำงานโดยตรงกับอักขระในไฟล์เช่นการเปลี่ยนและค้นหา
คลาสผู้อ่านประกอบขึ้นสำหรับข้อบกพร่องนี้และสามารถป้อน/เอาต์พุตในรูปแบบข้อความซึ่งสะดวกมาก ตัวอย่างเช่นคุณสามารถใช้ขณะที่ ((ch = filereader.read ())! =-1) ลูปเพื่ออ่านไฟล์; คุณสามารถใช้เมธอด readline () ของ bufferedreader เพื่ออ่านข้อความทีละบรรทัด
(2) การเข้ารหัส
InputStreamReader มันเป็นบริดจ์สำหรับการแปลงไบต์เป็นอักขระ คุณสามารถระบุวิธีการเข้ารหัสใหม่ในตัวสร้าง หากไม่ได้ระบุวิธีการเข้ารหัสเริ่มต้นของระบบปฏิบัติการพื้นฐานจะถูกนำมาใช้เช่น GBK ฯลฯ
Filereader และ InputStreamReader เกี่ยวข้องกับการเข้ารหัสการแปลง (ระบุวิธีการเข้ารหัสหรือใช้การเข้ารหัสระบบปฏิบัติการเริ่มต้น) และรหัสที่อ่านไม่ออกอาจเกิดขึ้นบนแพลตฟอร์มที่แตกต่างกัน! FileInputStream ถูกประมวลผลในโหมดไบนารีและจะไม่มีรหัสที่อ่านไม่ออก
ดังนั้นเมื่อระบุวิธีการเข้ารหัสจะต้องใช้คลาส InputStreamReader ดังนั้นจึงเป็นบริดจ์สำหรับการแปลงไบต์เป็นอักขระ
(3) พื้นที่แคช
คลาส BufferReader ใช้เพื่อห่อผู้อ่านทั้งหมดที่มีการอ่าน () การดำเนินการอาจมีราคาแพง (เช่น filereader และ inputstreamreader)
(4) การใช้งานมาตรฐาน
สรุปข้างต้นและสร้างการใช้มาตรฐานที่ดีขึ้น:
1) ไฟล์ไฟล์ = ไฟล์ใหม่ ("hello.txt");
FileInputStream ใน = ใหม่ FileInputStream (ไฟล์);
2) ไฟล์ไฟล์ = ไฟล์ใหม่ ("hello.txt");
FileInputStream ใน = ใหม่ FileInputStream (ไฟล์); inputStreamReader inReader = new InputStreamReader (ใน "UTF-8"); bufferedReader bufreader = ใหม่ bufferedReader (inReader);
3) ไฟล์ไฟล์ = ไฟล์ใหม่ ("hello.txt");
filereader filereader = filereader ใหม่ (ไฟล์); bufferedReader bufreader = ใหม่ bufferedReader (filereader);