Java NIO กับ IO
ดังที่เราทราบว่า java NIO ได้รับการแนะนำเพื่อความก้าวหน้าของ java IO API แบบเดิมการปรับปรุงหลักที่ทำให้ NIO มีประสิทธิภาพมากกว่า IO คือรูปแบบการไหลของข้อมูลช่องสัญญาณที่ใช้ใน NIO และการใช้ระบบปฏิบัติการสำหรับงาน IO ทั่วไป
ความแตกต่างระหว่าง Java NIO และ Java IO สามารถอธิบายได้ดังต่อไปนี้ -
ดังที่ได้กล่าวไว้ในโพสต์ก่อนหน้าในบัฟเฟอร์ NIO และการไหลของข้อมูลที่มุ่งเน้นช่องสัญญาณสำหรับการดำเนินการ I / O ซึ่งให้การดำเนินการที่เร็วขึ้นและประสิทธิภาพที่ดีขึ้นเมื่อเทียบกับ IO นอกจากนี้ NIO ยังใช้ระบบปฏิบัติการสำหรับงาน I / O ทั่วไปซึ่งทำให้มีประสิทธิภาพมากขึ้นอีกครั้ง
ความแตกต่างอื่น ๆ ระหว่าง NIO และ IO คือ IO นี้ใช้การไหลของข้อมูลสตรีมไลน์เช่นครั้งละหนึ่งไบต์และอาศัยการแปลงอ็อบเจ็กต์ข้อมูลเป็นไบต์และในทางกลับกันในขณะที่ NIO เกี่ยวข้องกับบล็อกข้อมูลซึ่งเป็นกลุ่มไบต์
ในอ็อบเจ็กต์สตรีม java IO เป็นแบบทิศทางเดียวในขณะที่ช่อง NIO เป็นแบบสองทิศทางหมายความว่าช่องสัญญาณสามารถใช้สำหรับข้อมูลการอ่านและการเขียน
การไหลของข้อมูลที่คล่องตัวใน IO ไม่อนุญาตให้ย้ายไปมาและย้อนกลับในข้อมูลหากกรณีจำเป็นต้องย้ายไปมาและย้อนกลับในข้อมูลที่อ่านจากสตรีมจำเป็นต้องแคชข้อมูลในบัฟเฟอร์ก่อนในขณะที่ NIO เราใช้บัฟเฟอร์เชิง ซึ่งช่วยให้สามารถเข้าถึงข้อมูลไปมาได้โดยไม่ต้องใช้แคช
NIO API ยังรองรับ multi threading เพื่อให้สามารถอ่านและเขียนข้อมูลแบบอะซิงโครนัสได้เช่นในขณะที่ดำเนินการ IO เธรดปัจจุบันจะไม่ถูกบล็อกสิ่งนี้ทำให้มีประสิทธิภาพมากกว่า java IO API ทั่วไปอีกครั้ง
มีการนำแนวคิดของเธรดหลายแบบมาใช้ด้วยการแนะนำ Selectors ใน java NIO ซึ่งอนุญาตให้ฟังหลายช่องทางสำหรับเหตุการณ์ IO ในแบบอะซิงโครนัสหรือไม่ปิดกั้น
เธรดหลายเธรดใน NIO ทำให้ไม่ใช่การปิดกั้นซึ่งหมายความว่าเธรดถูกร้องขอให้อ่านหรือเขียนเฉพาะเมื่อมีข้อมูลเท่านั้นมิฉะนั้นเธรดจะสามารถใช้ในงานอื่นได้ในเวลาเฉลี่ย แต่จะเป็นไปไม่ได้ในกรณีของ java IO ทั่วไปเนื่องจากไม่มีเธรดแบบหลายเธรด ได้รับการสนับสนุนซึ่งทำให้เป็นการปิดกั้น
NIO อนุญาตให้จัดการหลายช่องทางโดยใช้เธรดเดียวเท่านั้น แต่ค่าใช้จ่ายคือการแยกวิเคราะห์ข้อมูลอาจค่อนข้างซับซ้อนกว่าเมื่ออ่านข้อมูลจากสตรีมการบล็อกในกรณีของ java IO ดังนั้นในกรณีที่ต้องการการเชื่อมต่อน้อยลงด้วยแบนด์วิดท์ที่สูงมาก ด้วยการส่งข้อมูลจำนวนมากในแต่ละครั้งมากกว่าในกรณีนี้ java IO API อาจเหมาะสมที่สุด