2010-11-01 5 views
31

Tôi đã đi qua hai thuật ngữ này và sự hiểu biết của tôi về chúng dường như trùng lặp với nhau. Tuôn ra được sử dụng với bộ đệm và đồng bộ được sử dụng để nói về sự thay đổi bền bỉ của tập tin vào đĩa.I/O khái niệm tuôn ra vs đồng bộ

Trong C, fflush (stdin) đảm bảo rằng bộ đệm bị xóa. Và fsync để tiếp tục thay đổi tập tin vào đĩa.

Nếu các khái niệm này không được xác định phổ biến, sẽ thích giải thích bằng linux, java.

Tôi đã tìm thấy bài đăng có liên quan nhưng ir không thực sự trả lời câu hỏi của tôi. Really force file sync/flush in Java

+0

Cụ thể, tôi bắt gặp cuốn sách này liên quan đến Java có nội dung "đảm bảo tuôn ra và đồng bộ hóa". mỗi bước trong số này liên quan đến những gì? Tôi muốn một câu trả lời phân biệt cả hai và cũng là một kịch bản mà cả hai đều có liên quan. – smartnut007

Trả lời

57

Trong Java, phương thức flush() được sử dụng trong luồng và nhà văn đầu ra để đảm bảo rằng dữ liệu đệm được ghi ra. Tuy nhiên, theo Javadocs:

Nếu đích dự định của luồng này là trừu tượng được cung cấp bởi hệ điều hành cơ bản, ví dụ một tệp, sau đó xả luồng đảm bảo chỉ các byte trước đó được ghi vào luồng với hệ điều hành để viết; nó không đảm bảo rằng chúng thực sự được ghi vào một thiết bị vật lý như ổ đĩa.

Mặt khác, FileDescriptor.sync() có thể được sử dụng để đảm bảo dữ liệu được đệm bởi hệ điều hành được ghi vào thiết bị vật lý (đĩa). Điều này giống như cuộc gọi sync trong Linux/POSIX.

Nếu ứng dụng Java của bạn thực sự cần phải đảm bảo dữ liệu được thể chất ghi vào đĩa, bạn có thể cần phải flushsync, ví dụ:

FileOutputStream out = new FileOutputStream(filename); 

[...] 

out.flush(); 
out.getFD().sync(); 

Tài liệu tham khảo:

+11

Nếu tôi có thể giải quyết vấn đề này một cách thô lỗ. Vì vậy, xóa sạch bộ đệm jvm và chuyển nó vào bộ đệm hệ điều hành. Đồng bộ hóa đảm bảo hệ điều hành thực sự vẫn tồn tại nội dung cần lưu trữ. điều đó có hợp lý không? – smartnut007

+0

Chính xác. Đây chính là cách nó hoạt động. – Grodriguez

+0

flush nói "ghi bộ đệm". Tôi thích viết ra ở đâu? viết ra âm thanh đồng nghĩa với việc tồn tại với tôi. Do đó, khó hiểu. – smartnut007