Java NIO và IO
Như chúng ta đã biết, java NIO được giới thiệu để cải tiến cho API java IO thông thường. Các cải tiến chính giúp NIO hiệu quả hơn IO là mô hình luồng dữ liệu kênh được sử dụng trong NIO và sử dụng hệ điều hành cho các tác vụ IO thông thường.
Sự khác biệt giữa Java NIO và Java IO có thể được giải thích như sau:
Như đã đề cập trong bài trước trong bộ đệm NIO và luồng dữ liệu hướng kênh cho các hoạt động I / O cung cấp tốc độ thực thi nhanh hơn và hiệu suất tốt hơn so với IO. Ngoài ra, NIO còn sử dụng hệ điều hành cho các tác vụ I / O thông thường, một lần nữa làm cho nó hiệu quả hơn.
Một khía cạnh khác của sự khác biệt giữa NIO và IO là IO này sử dụng luồng dữ liệu dòng, tức là thêm một byte tại một thời điểm và dựa vào việc chuyển đổi các đối tượng dữ liệu thành byte và ngược lại trong khi NIO xử lý các khối dữ liệu là các phần của byte.
Trong java các đối tượng luồng IO là một chiều trong khi trong NIO các kênh là hai chiều nghĩa là một kênh có thể được sử dụng cho cả việc đọc và ghi dữ liệu.
Luồng dữ liệu sắp xếp hợp lý trong IO không cho phép di chuyển qua lại trong dữ liệu. Nếu trong trường hợp cần di chuyển tới lui trong dữ liệu được đọc từ một luồng cần lưu trữ nó vào bộ đệm trước. Trong trường hợp NIO, chúng tôi sử dụng định hướng bộ đệm cho phép truy cập dữ liệu qua lại mà không cần bộ nhớ đệm.
NIO API cũng hỗ trợ đa luồng để dữ liệu có thể được đọc và ghi không đồng bộ theo cách mà trong khi thực hiện các hoạt động IO, luồng hiện tại không bị chặn. Điều này một lần nữa làm cho nó hiệu quả hơn API java IO thông thường.
Khái niệm về đa luồng được giới thiệu với sự ra đời của Selectors trong java NIO cho phép nghe nhiều kênh cho các sự kiện IO theo cách không đồng bộ hoặc không chặn.
Đa luồng trong NIO làm cho nó Không bị chặn, có nghĩa là luồng chỉ được yêu cầu đọc hoặc ghi khi có dữ liệu, nếu không luồng có thể được sử dụng trong tác vụ khác trong thời gian bình thường. Nhưng điều này không khả thi trong trường hợp IO java thông thường vì không có đa luồng được hỗ trợ trong đó làm cho nó như là Chặn.
NIO cho phép quản lý nhiều kênh chỉ bằng một luồng duy nhất, nhưng cái giá phải trả là việc phân tích dữ liệu có thể phức tạp hơn một chút so với khi đọc dữ liệu từ luồng chặn trong trường hợp java IO. Vì vậy, trong trường hợp cần ít kết nối hơn với băng thông rất cao. với việc gửi nhiều dữ liệu cùng một lúc, trong trường hợp này, API IO của java có thể là phù hợp nhất.