Java NIO - Phân tán
Như chúng ta biết rằng Java NIO là một API được tối ưu hóa hơn cho các hoạt động IO dữ liệu so với API IO thông thường của Java. Một hỗ trợ bổ sung nữa mà Java NIO cung cấp là đọc / ghi dữ liệu từ / đến nhiều bộ đệm tới kênh. và hỗ trợ ghi được gọi là Phân tán và Tập hợp trong đó dữ liệu được phân tán đến nhiều bộ đệm từ một kênh duy nhất trong trường hợp dữ liệu đọc trong khi dữ liệu được thu thập từ nhiều bộ đệm vào một kênh trong trường hợp ghi dữ liệu.
Để đạt được nhiều lần đọc và ghi này từ kênh, có API ScatteringByteChannel và GatheringByteChannel mà Java NIO cung cấp để đọc và ghi dữ liệu như minh họa trong ví dụ dưới đây.
ScatteringByteChannel
Read from multiple channels - Trong điều này, chúng tôi thực hiện để đọc dữ liệu từ một kênh duy nhất vào nhiều bộ đệm, vì nhiều bộ đệm này được cấp phát và được thêm vào một mảng kiểu bộ đệm. kênh trong chuỗi các bộ đệm xuất hiện trong mảng. Khi một bộ đệm đầy, kênh sẽ chuyển sang lấp đầy bộ đệm tiếp theo.
Ví dụ sau cho thấy cách phân tán dữ liệu được thực hiện trong 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();
}
}
}
Đầu ra
Scattering : Len1 = 1214606444
Scattering : Len2 = 0
Cuối cùng, có thể kết luận rằng phương pháp phân tán / tập hợp trong Java NIO được giới thiệu là một phương pháp được tối ưu hóa và đa nhiệm khi được sử dụng đúng cách. Nó cho phép bạn ủy quyền cho hệ điều hành công việc khó khăn trong việc tách dữ liệu bạn đọc thành nhiều nhóm hoặc tập hợp Không còn nghi ngờ gì nữa, điều này tiết kiệm thời gian và sử dụng hệ điều hành hiệu quả hơn bằng cách tránh các bản sao bộ đệm và giảm lượng mã cần viết và gỡ lỗi.