IO Stream
ใน Java สตรีม IO แบ่งออกเป็นสองประเภท: สตรีมไบต์และสตรีมอักขระ ตามชื่อที่แนะนำว่าสตรีมไบต์จะถูกอ่านและเขียนตามไบต์และอักขระจะเข้าถึงได้ตามอักขระ การอ่านไฟล์ที่ใช้กันทั่วไปคือสตรีมอักขระและสตรีมไบต์ใช้ในการสื่อสารเครือข่าย
รูปต่อไปนี้เป็นกรอบโดยรวมของลำธาร IO ใน Java:
สตรีมไบต์
ในชวาลำธารไบต์มักจะจบลงด้วยสตรีม สตรีมอินพุตไบต์เรียกว่าอินพุตสตรีมและกระแสไบต์เอาต์พุตเรียกว่าเอาท์พุทสตรีม InputStream และ Outputstream เป็น superclasses ที่แสดงคลาสทั้งหมดของอินพุต/เอาต์พุตและเป็นคลาสนามธรรม (นามธรรม)
สตรีมไบต์ที่ใช้กันทั่วไปคือ:
1.FileInputStream/FileOutputStream2.BufferedInputStream/BufferedOutputStream3.extexenceInputStream (Sequence Stream) 4.ObjectInputStream/ObjectOutputStream (อินพุตวัตถุและกระแสเอาต์พุต) 5.PrintStream (พิมพ์สตรีม)
สตรีมตัวละคร
ใน Java สตรีมอักขระอินพุตจะจบลงด้วยเครื่องอ่านและสตรีมอักขระเอาต์พุตจะจบลงด้วยนักเขียน ตัวอย่างเช่น Filereader และ FileWriter ทั่วไปของเราคือสตรีมอักขระและผู้อ่านและ Witer เป็น superclasses ของสตรีมอักขระอินพุต/เอาต์พุตและยังเป็นคลาสนามธรรม
สตรีมอักขระที่ใช้กันทั่วไปคือ:
1.FileReader/FileWriter2.BufferedReader/BufferedWriter3.InputStremreader/OutputStreamWriter (แปลงสตรีม)
แปลงกระแส
สตรีมการแปลงเป็นคลาสที่แปลงสตรีมไบต์เป็นสตรีมอักขระและมีสองประเภท:
・ InputStreamReader ・ OutputStreamWriter
InputStreamReader เป็นสตรีมอักขระ (ตัวอ่าน) ซึ่งต้องการการห่อสตรีมไบต์ (InputStream);
OutputStreamWriter เป็นสตรีมอักขระ (นักเขียน) และจำเป็นต้องห่อสตรีมไบต์ (OutputStream)
ตกแต่ง
วัตถุประสงค์ของบรรจุภัณฑ์คือการเพิ่มฟังก์ชั่นใหม่บนพื้นฐานของวัตถุต้นฉบับ ตัวอย่างเช่น bufferedReader ห่อเครื่องอ่านซึ่งจริง ๆ แล้วเป็นการเพิ่มประสิทธิภาพของฟังก์ชั่นผู้อ่าน ตัวอ่านต้นฉบับสามารถอ่านได้โดยตัวละครหนึ่งตัวและตัวละครหนึ่งตัวเท่านั้น พูดอย่างสังหรณ์ใจนี่คือการตกแต่งที่เรียกว่า
ในแง่ของโหมดการออกแบบนี่เป็นโหมดการตกแต่งทั่วไปและลักษณะของมันคือ:
1. วัตถุตกแต่งและวัตถุจริงมีอินเทอร์เฟซเดียวกัน ด้วยวิธีนี้วัตถุลูกค้าสามารถโต้ตอบกับวัตถุตกแต่งในลักษณะเดียวกับวัตถุจริง 2. วัตถุตกแต่งสามารถเพิ่มฟังก์ชั่นเพิ่มเติมก่อนหรือหลังการส่งต่อคำขอเหล่านี้ สิ่งนี้ทำให้มั่นใจได้ว่าในระหว่างการรันไทม์สามารถเพิ่มฟังก์ชั่นเพิ่มเติมจากภายนอกได้โดยไม่ต้องแก้ไขโครงสร้างของวัตถุที่กำหนด
ที่สอดคล้องกับเราคือ BufferedReader และ Reader เป็นทั้งผู้อ่าน หลังจากบรรจุภัณฑ์แล้วฟังก์ชั่นบัฟเฟอร์เดอร์ได้รับการปรับปรุง แต่ก็ยังสามารถใช้เป็นผู้อ่าน (การอ้างอิงคลาสแม่ของ OO สามารถชี้ไปที่คลาสย่อย)
ตัวอย่าง
ตัวอย่างของสตรีมไบต์
ตัดไฟล์ mp3 เป็นหลายสำเนาและรวมตัวกันใหม่
แพ็คเกจ cn.xdian.test; นำเข้า java.io.file; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileoutputstream; นำเข้า java.io.ioException; นำเข้า Java.io.equenceInputstream; นำเข้า Java.util.enumeration โยน ioexception {cutfile (); // cut mp3 ไฟล์ mergeflile (); // merge mp3 ไฟล์} // ผสาน mp3public static void mergeflile () พ่น ioexception {ไฟล์ dir = ไฟล์ใหม่ ("/home/gavinzhou/music_test"); Vector <FileInputStream> (); ไฟล์ [] files = dir.listfiles (); สำหรับ (ไฟล์ไฟล์: ไฟล์) {ถ้า (file.getName (). endswith (". mp3")) {vector.add (ใหม่ fileInputStream (ไฟล์));}} // รับตัววนซ้ำผ่านการระบุเวกเตอร์ fileOutputStream fileOutputStream = ใหม่ fileOutputStream ("/home/gavinzhou/conbine.mp3"); // อ่านไฟล์ mp3 ที่แยก [] buf = byte ใหม่ [1024]; ความยาว int = 0; fileOutputStream.close (); inputStream.close ();} // ตัด mp3public void cutfile () พ่น ioexception {ไฟล์ไฟล์ = ไฟล์ใหม่ ("/home/gavinzhou/test.mp3") ไฟล์ dir = ไฟล์ใหม่ ("/home/gavinzhou/music_test FileInputStream (ไฟล์); // อ่านไฟล์ไบต์ [] buf = ไบต์ใหม่ [1024*1024]; ความยาว int = 0; สำหรับ (int i = 0; (length = fileInputStream.read (buf))! =-1; i ++) ไฟล์ (dir, "ส่วน"+i+". mp3")); fileoutputStream.write (buf, 0, ความยาว); fileOutputStream.close ();} // ปิดสตรีม fileinputStream.close ();}}}ตัวอย่างของสตรีมอักขระ
คัดลอกไฟล์ A ไปยังไฟล์ B
แพ็คเกจ cn.xidian.test; นำเข้า java.io.bufferedreader; นำเข้า java.io.bufferedwriter; นำเข้า java.io.file; นำเข้า java.io.filereader; นำเข้า java.io.filewriter; นำเข้า Java.io.io.io.ioSception; ไฟล์ ("/home/gavinzhou/a.txt"); file desfile = ไฟล์ใหม่ ("/home/gavinzhou/b.txt"); // สร้างอินพุตอินพุตอินพุตอินพุตอินพุต = new BufferedReader สตริงบรรทัด = null; ในขณะที่ ((line = input.readline ())! = null) {output.write (บรรทัด); output.newline ();} // ปิดอินพุตและกระแสอินพุตอินพุต. close (); output.close ();}}}ตัวอย่างของสตรีมการพิมพ์
แพ็คเกจ cn.xidian.test; นำเข้า java.io.file; นำเข้า java.io.fileoutputstream; นำเข้า java.io.ioException; นำเข้า java.io.printstream;/*สตรีมพิมพ์สามารถพิมพ์ข้อมูลทุกประเภท ก่อนที่จะพิมพ์ข้อมูลข้อมูลจะถูกแปลงเป็นสตริงแล้วพิมพ์*/คลาสสัตว์ {ชื่อสตริง; สีสตริง; สัตว์สาธารณะ (ชื่อสตริง, สีสตริง) {this.name = name; this.color = color;}@override public String toString () args) พ่น ioexception {/* ไฟล์ไฟล์ = ไฟล์ใหม่ ("/home/gavinzhou/a.txt"); // สร้างการพิมพ์สตรีม printstream printstream = ใหม่ printstream (ไฟล์); // พิมพ์ข้อมูลใด ๆ ลงในไฟล์ printstream.println (97); printstream.println (3.14); printstream.println ('a'); printstream.println (จริง); สัตว์ A = สัตว์ใหม่ ("หนู", "ดำ"); printstream.println (a); // เปลี่ยนระบบอินพุตและเอาต์พุตมาตรฐาน SetOut (PrintStream); // เอาต์พุตมาตรฐานคือไปยัง Screen System.out.println ("ทดสอบ .... "); */// การรวบรวมข้อมูลบันทึกข้อยกเว้น ไฟล์ logfile = ไฟล์ใหม่ ("/home/gavinzhou/test.log"); printstream logprintstream = printstream ใหม่ (ใหม่ fileOutputStream (logfile, true)); ลอง {int c = 4/0; // สร้างระบบยกเว้น e) {E.PrintStackTrace (LogPrintStream); // เอาต์พุตไปยังไฟล์แทนบนหน้าจอ}}}}}สรุป
ข้างต้นคือทั้งหมดเกี่ยวกับการวิเคราะห์สตรีม IO และตัวอย่างรหัสใน Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงเว็บไซต์นี้ต่อไปได้:
Java Exploration: ตัวอย่างรหัสที่เข้ารหัสและถอดรหัสของไฟล์เธรด+io
การวิเคราะห์รหัสความรู้ที่เกี่ยวข้องกับ java io stream
การตีความอย่างละเอียดของสตรีม Java IO
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!