Java IO trong Java được sử dụng để thực các thao tác đọc ghi dữ liệu từ các nguồn khác nhau. Package java.io.package chứa tất cả các class cần để thực thi các thao tác IO.
Về sau, Java NIO (New IO) được giới thiệu trong phiên bản JDK 4 cho phép thực thi các thao tác IO với tốc độ nhanh và cung cấp nhiều tính năng hỗ trợ tối ưu hóa hiệu suất.
Java NIO (New input/output) được xem là một công cụ thay thế Java IO, giúp các thao tác đọc ghi dữ liệu từ network hoặc các tập tin đạt hiệu suất cao hơn. Cũng giống như java.io package, java.nio package định nghĩa các buffer class được sử dụng xuyên suốt trong các NIO API.
Có 2 tính năng quan trọng và nổi bật nhất của Java NIO làm chúng ta phải sử dụng nó:
- Non-blocking IO operation: có nghĩa là nó sẽ đọc dữ liệu bất cứ khi nào chúng sẵn sàng, trong thời gian chờ thì thread có thể thực thi các nhiệm vụ khác làm tăng hiệu suất của toàn ứng dụng.
- Buffer oriented approach: Java NIO tiếp cận dữ liệu bằng sử dụng bộ nhớ đệm. Dữ liệu được đọc và lưu lại trong đó, bất cứ khi nào cần chúng sẽ được lấy ra và xử lý tại đây.
Các hoạt động trên có thể đạt được thông qua một số thành phần chủ chốt:
- Buffers: Mỗi buffer thật chất là một vùng nhớ mà bạn có thể đọc và ghi dữ liệu từ đó. Vùng nhớ này được bao bọc trong một NIO Buffer object, cung cấp các method hỗ trợ thao tác với dữ liệu trong vùng nhớ này.
- Channel: Có một chút tương đồng với Stream API, được dùng để giao tác giữa nội bộ Java NIO với bên ngòai. Từ một channel chúng ta có thể đọc dữ liệu từ một buffer hoặc ghi dữ liệu vào một buffer.
- Selectors: Một selector là một object quản lý nhiều channel. Khi Java NIO thực thi các hoạt động non-block IO, selector sẽ có nhiệm vụ chọn ra các channel đang sẵn sàng để thực thi nhiệm vụ.
Java NIO cung cấp một mô hình I / O mới dựa trên Channel, Buffer và Selector. Vì vậy, các mô-đun này được coi là cốt lõi của API.
Nguồn
http://tutorials.jenkov.com/java-nio/buffers.html
https://www.geeksforgeeks.org/introduction-to-java-nio-with-examples/