java.io ใช้รูปแบบการออกแบบเช่นโหมดการตกแต่งโหมดอะแดปเตอร์เพื่อแก้ปัญหาซ็อกเก็ตและอินพุตและปัญหาเอาต์พุตของสตรีมอักขระ
สตรีมไบต์สามารถประมวลผลได้ทีละไบต์เท่านั้นและเพื่อให้สามารถใช้งานข้อมูลได้ง่ายขึ้นจะมีการเพิ่มซ็อกเก็ตสตรีม
ปัญหาแนะนำ:
เหตุใดสตรีมบัฟเฟอร์จึงมีประสิทธิภาพมากกว่าสตรีมไฟล์ธรรมดา
สำหรับการดำเนินการที่ไม่มีบัฟเฟอร์ต้องเขียนหนึ่งไบต์สำหรับการอ่านแต่ละไบต์
เนื่องจากการดำเนินการของ IO ที่เกี่ยวข้องกับดิสก์ช้ากว่าการทำงานของหน่วยความจำมากสตรีมที่ไม่มีบัฟเฟอร์ไม่มีประสิทธิภาพมาก
สตรีมที่มีบัฟเฟอร์สามารถอ่านได้หลายครั้งในแต่ละครั้ง แต่ไม่ได้เขียนลงในดิสก์ แต่วางไว้ในหน่วยความจำก่อน
เมื่อคุณมีขนาดบัฟเฟอร์เพียงพอให้เขียนลงในดิสก์ในครั้งเดียว วิธีนี้สามารถลดจำนวนการทำงานของดิสก์และความเร็วจะสูงขึ้นมาก!
นี่คือความแตกต่างระหว่างทั้งสอง
อาจเป็นกระบวนการ:
หากไม่มีพื้นที่แคชทุกครั้งที่คุณอ่านการดำเนินการ IO จะถูกส่ง;
มีพื้นที่แคช เมื่อคุณอ่านครั้งแรก X ไบต์จะถูกอ่านและใส่ลงในพื้นที่แคช จากนั้นการอ่านที่ตามมาจะถูกอ่านจากแคช เมื่อคุณอ่านถึงจุดสิ้นสุดของพื้นที่แคช X ไบต์จะถูกอ่านอีกครั้งและใส่ลงในพื้นที่แคช
เห็นได้ชัดว่าวิธีที่สองจะลดการดำเนินงานของ IO และมีประสิทธิภาพมากขึ้น ข้อเสียคือมันใช้หน่วยความจำมากขึ้น
สตรีมอินพุตและเอาต์พุต Java ได้รับการออกแบบโดยใช้การห่อหุ้มหลายชั้น
อินพุตระดับต่ำสุดและเอาท์พุทสตรีมขึ้นอยู่กับสตรีมไบต์และไม่มีกลไกแคช โดยทั่วไปจะถูกห่อหุ้มและใช้หลังจากใช้งานโดย bufferInputStream และ bufferOutputStream
วิธีการอ่านของ BufferInputStream บล็อกเธรด BufferInputStream.read (BUF) จะอ่านสตรีมอินพุตทั้งหมดลงใน BUF ก่อนที่จะกลับมา
bufferOutputStream.write (buf); จะส่งออกเนื้อหาใน BUF ไปยังสตรีมเอาต์พุต แต่อย่าลืมล้างออก
นอกจากนี้ยังมี printstream และ printwriter ที่ใช้งานง่ายซึ่งสามารถรีเฟรชโดยอัตโนมัติ แต่สำหรับสตรีมไบต์
โดยทั่วไปแล้วสตรีมไบต์จะใช้ในการถ่ายโอนไฟล์ไบนารีและสตรีมอักขระอื่น ๆ พวกเขามักจะห่อด้วยผู้อ่าน
สิ่งที่ใช้กันมากที่สุดคือ BufferInputStreamReader และ PrintWinter วิธี readline ของ bufferInputStreamReader นั้นใช้งานได้จริงมากและจะล้างออกโดยอัตโนมัติเมื่อพบ /r /d
PrintWinter ตราบใดที่คุณสมบัติการรีเฟรชถูกตั้งค่าเป็นจริงในตัวสร้างวิธีการพิมพ์สามารถรีเฟรชโดยอัตโนมัติโดยไม่ต้องล้าง
FilterInputStream และ FilterOutputStream: การไหลของตัวกรอง, การไหลของบัฟเฟอร์และการไหลของข้อมูลทั้งคู่สืบทอดมาจากที่นี่
สำหรับสตรีมบัฟเฟอร์ข้อมูลจะถูกถ่ายโอนไปยังสตรีมเอาท์พุทอย่างแท้จริงเฉพาะเมื่อบัฟเฟอร์เต็ม แต่วิธีการล้าง () สามารถใช้เพื่อส่งข้อมูลจากบัฟเฟอร์ที่ไม่ได้ทำเทียม วิธีการเข้ารหัสของไฟล์ไม่สามารถกำหนดได้และเป็นการยากที่จะใช้กับเครือข่าย
สิ่งที่ใช้กันมากที่สุดในทางปฏิบัติคือสตรีมข้อมูลสามารถอนุญาตให้ผู้ส่งและตัวรับสัญญาณดำเนินการตามการเข้ารหัสเดียวกัน
DatainputStream และ DataOrtputStream: สามารถรับสายข้อมูลสามารถเข้ารหัสหรืออาจเป็นซ็อกเก็ตสตรีมสามารถใช้ซ็อกเก็ตไฟล์ไบต์สตรีมและสตรีมเครือข่ายไบต์และลำดับการอ่านและการเขียนจะต้องสอดคล้องกันมิฉะนั้นจะมีข้อยกเว้นเมื่ออ่าน
DatainputStream ใช้ในการตกแต่งสตรีมอินพุตอื่น ๆ ซึ่ง "อนุญาตให้แอปพลิเคชันอ่านประเภทข้อมูล Java พื้นฐานจากสตรีมอินพุตพื้นฐานในลักษณะที่ไม่ขึ้นกับเครื่อง" แอปพลิเคชันสามารถใช้ DataOutputStream เพื่อเขียนข้อมูลที่อ่านโดย DatainputStream
ด้านบนคือ java.io input และ output stream stream stream buffer stream และสตรีมข้อมูลที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!