Java NIO - กระจาย
ดังที่เราทราบว่า Java NIO เป็น API ที่ได้รับการปรับให้เหมาะสมกว่าสำหรับการดำเนินการ IO ข้อมูลเมื่อเทียบกับ IO API ทั่วไปของ Java การสนับสนุนเพิ่มเติมอีกอย่างหนึ่งที่ Java NIO มีให้คือการอ่าน / เขียนข้อมูลจาก / ไปยังหลายบัฟเฟอร์ไปยังแชนเนล และการสนับสนุนการเขียนเรียกว่า Scatter and Gather ซึ่งข้อมูลจะกระจัดกระจายไปยังหลายบัฟเฟอร์จากช่องทางเดียวในกรณีของข้อมูลที่อ่านในขณะที่รวบรวมข้อมูลจากหลายบัฟเฟอร์ไปยังช่องเดียวในกรณีที่เขียนข้อมูล
เพื่อให้บรรลุการอ่านและเขียนหลายช่องทางนี้มี ScatteringByteChannel และ GatheringByteChannel API ซึ่ง Java NIO จัดเตรียมไว้สำหรับอ่านและเขียนข้อมูลดังที่แสดงในตัวอย่างด้านล่าง
ScatteringByteChannel
Read from multiple channels - ในสิ่งนี้เราทำขึ้นเพื่ออ่านข้อมูลจากแชนเนลเดียวเป็นหลายบัฟเฟอร์สำหรับบัฟเฟอร์หลายตัวนี้จะถูกจัดสรรและเพิ่มลงในอาร์เรย์ประเภทบัฟเฟอร์จากนั้นอาร์เรย์นี้จะถูกส่งเป็นพารามิเตอร์ไปยังเมธอด ScatteringByteChannel read () ซึ่งจะเขียนข้อมูลจาก ช่องสัญญาณในลำดับที่บัฟเฟอร์เกิดขึ้นในอาร์เรย์เมื่อบัฟเฟอร์เต็มช่องจะย้ายไปเติมบัฟเฟอร์ถัดไป
ตัวอย่างต่อไปนี้แสดงวิธีการกระจายข้อมูลใน Java NIO
C: /Test/temp.txt
Hello World!
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ScatteringByteChannel;
public class ScatterExample {
private static String FILENAME = "C:/Test/temp.txt";
public static void main(String[] args) {
ByteBuffer bLen1 = ByteBuffer.allocate(1024);
ByteBuffer bLen2 = ByteBuffer.allocate(1024);
FileInputStream in;
try {
in = new FileInputStream(FILENAME);
ScatteringByteChannel scatter = in.getChannel();
scatter.read(new ByteBuffer[] {bLen1, bLen2});
bLen1.position(0);
bLen2.position(0);
int len1 = bLen1.asIntBuffer().get();
int len2 = bLen2.asIntBuffer().get();
System.out.println("Scattering : Len1 = " + len1);
System.out.println("Scattering : Len2 = " + len2);
}
catch (FileNotFoundException exObj) {
exObj.printStackTrace();
}
catch (IOException ioObj) {
ioObj.printStackTrace();
}
}
}
เอาต์พุต
Scattering : Len1 = 1214606444
Scattering : Len2 = 0
สุดท้ายนี้สามารถสรุปได้ว่าวิธีการกระจาย / รวบรวมใน Java NIO ถูกนำมาใช้ในรูปแบบที่ปรับให้เหมาะสมและทำงานหลายอย่างพร้อมกันเมื่อใช้อย่างถูกต้องจะช่วยให้คุณสามารถมอบหมายให้ระบบปฏิบัติการทำงานหนักในการแยกข้อมูลที่คุณอ่านออกเป็นหลายที่เก็บข้อมูลหรือการประกอบ แยกชิ้นข้อมูลออกเป็นชิ้น ๆ ไม่ต้องสงสัยเลยว่าสิ่งนี้ช่วยประหยัดเวลาและใช้ระบบปฏิบัติการได้อย่างมีประสิทธิภาพมากขึ้นโดยหลีกเลี่ยงการคัดลอกบัฟเฟอร์และลดจำนวนโค้ดที่ต้องเขียนและดีบัก