2011-11-18 32 views
10

Tôi biết ý tưởng chung nhưng tôi không chắc liệu nó có tác dụng hay không vì trạng thái api của Android sau: "Làm sạch luồng này. Việc triển khai phương pháp này phải đảm bảo rằng mọi dữ liệu đệm được ghi ra. Việc triển khai này không làm gì cả. "Lợi ích của việc sử dụng flush() close() trong luồng Android?

Triển khai này không có gì là < - điều đó có nghĩa là vô ích nếu tôi làm hoặc tôi thiếu gì đó?

Trả lời

4

Nếu bạn đọc tài liệu mở rộng trên oracle

http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html#flush()

Flushes output stream này và buộc bất kỳ byte đầu ra đệm được viết ra. Các hợp đồng chung của tuôn ra là gọi nó là một dấu hiệu cho thấy, nếu bất kỳ byte trước đó bằng văn bản đã được đệm bởi việc thực hiện các dòng đầu ra, các byte như vậy ngay lập tức nên được ghi vào đích dự định của họ.

Phương thức xả của OutputStream không làm gì cả.

phương tiện, phương pháp riêng của mình không có gì, và nó là trừu tượng, vì vậy bất kỳ lớp cơ bản có thể thực hiện phiên bản riêng của mình suối đỏ bừng và buộc họ phải viết (không phải chờ đợi trong ghi hàng đợi)

Nhưng dù sao, như Guillaume đã chỉ ra, thực tiễn tốt là hãy gọi nó. Nếu sau này, bạn thay thế luồng của mình bằng một triển khai khác sử dụng nó, sau đó bạn sẽ rất tiếc.

Tùy thuộc vào hệ điều hành, lệnh tuôn ra() không làm gì hơn là buộc dữ liệu được ghi vào hệ điều hành.

flush() không có gì trên FileOutputStream. Nó chỉ hữu ích trên các luồng đệm.

và từ javadoc của close(), chỉ cần lưu ý bạn không phải tuôn ra luồng nếu bạn đóng ngay sau đó.

Đóng luồng, xả trước tiên. Khi một luồng đã được đóng lại, các lời gọi viết thêm() hoặc flush() sẽ gây ra một lỗi IOException. Tuy nhiên, đóng luồng đã đóng trước đó sẽ không có hiệu lực.

liên quan:
FileOutputStream.close is really slow when writing large file
flush in java.io.FileWriter

+0

Nhưng liệu InputStream và OutputStream có sử dụng của nó? hoặc là vô nghĩa để gọi? – Warpzit

+0

Thật vô nghĩa khi không sử dụng các luồng đệm mà tôi nghĩ. Không đệm dòng nên được ghi vào asap đích tùy thuộc vào hệ điều hành và HW cơ bản –

+0

Vì vậy, fileoutputstream không sử dụng nó và cùng đi với inputstream? – Warpzit

Các vấn đề liên quan