bufferedReader
BufferedReader เป็นสตรีมอินพุตอักขระบัฟเฟอร์ มันสืบทอดมาจากผู้อ่าน
จุดประสงค์ของ bufferedReader คือการเพิ่มฟังก์ชั่นบัฟเฟอร์บางอย่างไปยังสตรีมอินพุตอักขระอื่น ๆ
เมื่อสร้าง bufferreader เราจะระบุตัวอ่านเป็นพารามิเตอร์ผ่านตัวสร้าง BufferReader จะอ่านข้อมูลในเครื่องอ่านในแบทช์และทุกครั้งที่ส่วนหนึ่งของมันถูกอ่านลงในบัฟเฟอร์ หลังจากใช้งานส่วนนี้ของข้อมูลในบัฟเฟอร์ส่วนถัดไปของข้อมูลจะถูกอ่านจากผู้อ่าน
ทำไมฉันถึงต้องการบัฟเฟอร์? เหตุผลนั้นง่ายมากปัญหาประสิทธิภาพ! ข้อมูลในบัฟเฟอร์จะถูกเก็บไว้ในหน่วยความจำจริง ๆ ในขณะที่ข้อมูลดิบอาจถูกเก็บไว้ในฮาร์ดดิสก์หรือ Nandflash; เรารู้ว่าการอ่านข้อมูลจากหน่วยความจำนั้นเร็วกว่าการอ่านข้อมูลจากฮาร์ดดิสก์อย่างน้อย 10 เท่า
ถ้าอย่างนั้นทำไมไม่เพียงแค่อ่านข้อมูลทั้งหมดลงในบัฟเฟอร์ในครั้งเดียว? ก่อนอื่นอาจใช้เวลานานในการอ่านข้อมูลทั้งหมด ประการที่สองราคาหน่วยความจำมีราคาแพงมากและความจุไม่ใหญ่เท่ากับฮาร์ดไดรฟ์
ตัวอย่าง:
นำเข้า java.io.bufferedreader; นำเข้า java.io.bytearrayinputstream นำเข้า java.io.file; นำเข้า java.io.inputstream; นำเข้า java.io.filereader; นำเข้า java.io.ioexception; int len = 5; โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testBufferedReader (); } / ** * ฟังก์ชั่นทดสอบ API BufferedReader * / Void Private Static Void TestBufferedReader () {// สร้างสตรีมอักขระ bufferedReader ซึ่งเป็นอาร์เรย์ Arrayletters ลอง {ไฟล์ไฟล์ = ไฟล์ใหม่ ("bufferedreader.txt"); bufferedReader in = new bufferedReader (filereader ใหม่ (ไฟล์)); // อ่าน 5 อักขระจากสตรีมอักขระ "abcde" สำหรับ (int i = 0; i <len; i ++) {// ถ้าคุณสามารถอ่านอักขระถัดไปอ่านอักขระถัดไปถ้า (in.ready ()) {// อ่าน "อักขระถัดไปของสตรีมอักขระ" int tmp = in.read (); System.out.printf (" %d: %c/n", i, tmp); }} // ถ้า "สตรีมอักขระนี้" ไม่รองรับฟังก์ชั่นการทำเครื่องหมายออกไปโดยตรงถ้า (! in.marksupported ()) {system.out.println ("ไม่รองรับ!"); กลับ ; } // mark "ตำแหน่งดัชนีปัจจุบัน" นั่นคือทำเครื่องหมายองค์ประกอบของตำแหน่งที่ 6 - "F" // 1024 สอดคล้องกับ marklimit in.mark (1024); // ข้าม 22 อักขระ in.skip (22); // อ่าน 5 อักขระถ่าน [] buf = ถ่านใหม่ [len]; in.read (buf, 0, len); System.out.printf ("buf =%s/n", string.valueof (buf)); // อ่านข้อมูลที่เหลือของ line system.out.printf ("readline =%s/n", in.readline ()); // รีเซ็ต "ดัชนีของสตรีมอินพุต" เป็นตำแหน่งที่ทำเครื่องหมายด้วย Mark () นั่นคือรีเซ็ตเป็น "F" in.reset (); // อ่าน 5 อักขระจาก "รีเซ็ตตัวอักษรสตรีม" เป็น buf นั่นคืออ่าน "fghij" in.read (buf, 0, len); System.out.printf ("buf =%s/n", string.valueof (buf)); in.close (); } catch (filenotfoundException e) {e.printStackTrace (); } catch (SecurityException E) {E.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); - เนื้อหาของ bufferedReader.txt อ่านในโปรแกรมมีดังนี้:
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ผลการทำงาน:
0: A1: B2: C3: D4: EBUF = 01234ReadLine = 56789BUF = FGHIJ
BufferedWriter
BufferedWriter เป็นสตรีมเอาต์พุตอักขระบัฟเฟอร์ มันสืบทอดมาจากนักเขียน
จุดประสงค์ของ BufferedWriter คือการเพิ่มฟังก์ชั่นบัฟเฟอร์บางอย่างให้กับสตรีมเอาต์พุตอักขระอื่น ๆ
BufferedWriter บัฟเฟอร์ข้อมูลผ่านอาร์เรย์อักขระ เมื่อบัฟเฟอร์เต็มหรือผู้ใช้เรียกใช้ฟังก์ชัน FLUSH () มันจะเขียนข้อมูลของบัฟเฟอร์ไปยังสตรีมเอาต์พุต
ตัวอย่าง:
นำเข้า java.io.bufferedWriter; นำเข้า java.io.file; นำเข้า java.io.OutputStream; นำเข้า java.io.fileWriter; นำเข้า java.io.ioException; นำเข้า Java.io.filenotfoundException; นำเข้า Java.lang.SecurityException = 5; // สอดคล้องกับจดหมายภาษาอังกฤษ "abcdefghijklmnopqrstuvwxyz" // ถ่านสุดท้ายคงที่ [] arrayletters = "abcdefghijklmnopqrstuvwxyz"; ถ่านสุดท้ายคงที่ [] arrayletters = ใหม่ถ่าน [] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'q', '', ' โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testBufferedWriter (); } / *** ฟังก์ชั่นการทดสอบ API BufferedWriter* / Void Private Static Void TestBufferedWriter () {// สร้าง bufferedWriter ที่สอดคล้องกับ "สตรีมเอาต์พุตไฟล์" // ขนาดบัฟเฟอร์ที่สอดคล้องกันคือ 16 นั่นคือเมื่อข้อมูลบัฟเฟอร์> = 16 เนื้อหาของบัฟเฟอร์จะถูกเขียนลงในกระแสเอาต์พุตโดยอัตโนมัติ ลอง {file file = ไฟล์ใหม่ ("bufferWriter.txt"); bufferedWriter out = new BufferedWriter (ใหม่ FileWriter (ไฟล์)); // เขียน 10 อักขระแรกของอาร์เรย์ Arrayletters ไปยังสตรีมเอาท์พุท Out.write (Arrayletters, 0, 10); // เขียน "line break/n" ไปยังสตรีมเอาต์พุต out.write ('/n'); out.flush (); // readuserInput (); out.close (); } catch (filenotfoundException e) {e.printStackTrace (); } catch (SecurityException E) {E.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); }} / *** อ่านอินพุตของผู้ใช้* / โมฆะส่วนตัวคงที่ readUserInput () {System.out.println ("โปรดป้อนข้อความ:"); เครื่องสแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); // รอสตริงอินพุต str = reader.next (); System.out.printf ("อินพุตคือ: %s/n", str); -ผลการรัน: ไฟล์ "bufferWriter.txt" ถูกสร้างขึ้นและเนื้อหาของไฟล์คือ "abcdefghij"