Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về FileDescriptor trong java. Để dễ hiểu chúng ta cùng đi đến ví dụ sau.
Ví dụ Khi chúng ta mở một tập tin lên thì hệ thống sẽ khởi tạo một entry đại diện cho tập tin đó và lưu trữ thông tin của nó, entry này được gọi là FileDescriptor.
Về cơ bản, FileDescriptor cung cấp cơ chế xử lý tương ứng với từng cấu trúc của hệ thống bên dưới khi chúng ta mở tập tin, mở một socket hoặc từ các nguồn khác etc.
Note: Ứng dụng không nên khởi tạo FileDescriptor object, chúng ta chỉ cần khởi tạo FileInputStream hoặc FileOutputStream object và chúng sẽ chứa cả FileDescriptor object bên trong.
Ví dụ FileDescriptor
import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; class JavaFileDescriptorExample { public static void main(String[] args) throws IOException { FileInputStream fileInputStream = new FileInputStream(new File( "/Users/nguyenthanhhai/Desktop/test.txt")); FileDescriptor fd = fileInputStream.getFD(); System.out.println(" File descriptor Hashcode: " + fd.hashCode()); System.out.println(" File descriptor valid: " + fd.valid()); } }
Các method trong FileDescriptor
sync() – Đồng bộ hoá tất cả các bộ đệm với các thiết bị bên dưới. Khi tất cả các chỉnh sửa dữ liệu trên FileDescriptor được ghi xuống thiết bị sync sẽ return. Ví dụ đối với BufferedOutputStream dữ liệu sẽ được lưu trữ trong bộ nhớ đệm sau khi bộ nhớ đệm đầy thì nó mới bắt đầu ghi xuống tập tin, việc gọi sync() sẽ khiến BufferedOutputStream gọi flush() xuống FileDescriptor trước khi các dữ liệu này được đồng bộ xuống thiết bị.
Cú pháp
public void sync() parameters: Không Return: void Exception: SyncFailedException sẽ được ném ra nếu không có sự đảm bảo việc đồng bộ dữ liệu giữ bộ đệm với thiết bị.
valid() – Kiểm tra FileDescritor object có hợp lệ hay không?
Cú pháp
public boolean valid() Parameter: Không Return: true nếu FileDescriptor hợp lệ, ngược lại false
Tóm lược
FileDescriptor là khái niệm khá mơ hồ vì hầu hết các tính năng của nó được thực hiện bên dưới (sync() – đồng bộ hoá dữ liệu giữa các bộ đệm với thiết bị). Mình thường sử dụng valid() để kiểm tra xem FileDescriptor object có hợp lệ hay không vậy thôi.
Hiện tại mình vẫn chưa biết nhiều cách để sử dụng FileDescriptor, nếu các bạn biết hãy bình luận cho mình và mọi người tham khảo nghen.
Nguồn tham khảo
https://examples.javacodegeeks.com/core-java/io/filedescriptor/java-file-descriptor-example/