除了Flush()方法,我注意到Stream類也有一個FlushAsync()方法。在什麼情況下你會使用FlushAsync()方法?是否沖洗緩衝區太昂貴以至於不能異步運行?Stream Flush vs FlushAsync
1
A
回答
3
是的,它可能是非常昂貴的,因爲它可能可能實際寫入數據到底層媒體。
在任何這些條件可能爲真:
- 您有大量的數據的寫入(根據緩衝器大小)。
- 媒體本身可能很慢(網絡或接口速度較慢的設備)。
- 中間可能有抽象層,在有效寫入之前會進行進一步處理(例如壓縮/加密抽象)。
它可以是昂貴不亞於其他任何寫操作再有就是Async
版本(而且它會幫助API的一致性)。
FlushAsync()
如何實現是一個實現細節,它可能是線程池中的簡單Task
或更復雜的東西(異步I/O可能涉及操作系統本身)。它甚至可能是同步的(想象刷新一個MemoryStream
,它沒有任何緩衝區)。
+0
關於「大量數據」,請注意,這包括所有其他未決的IO,而不僅僅是源自使用流的那些IO。這就是爲什麼最好不要調用FlushAsync()。 –
0
從我收集的內容中,調用stream.Write()
可能會或可能不會將數據放入中間內存緩衝區,然後再將其卸載到其目標目標。發生這種情況時,stream.Write()
在實際寫入所有數據之前解除封鎖。
stream.Flush()
的作用是阻止程序,直到中間緩衝區清空。根據傳輸速度和數據大小,您可能需要異步訪問Flush()
。
相關問題
- 1. res.flushBuffer()vs res.getOutputStream()。flush();
- 2. Akka Stream vs Spark Stream
- 3. Stream vs Raw Bytes
- 4. 的flush()在rd.include VS rd.forward()
- 5. 概念:Channel vs Stream
- 6. Java 8 stream vs List
- 7. DataSet.WriteXml(Stream)vs DataSet.WriteXml(Path)
- 8. NSJSONSerialization vs stream based parser
- 9. `gulp.src` vs`vinyl-source-stream`?
- 10. Azure Storm vs Azure Stream Analytics
- 11. Kafka Stream API vs Consumer API
- 12. Stream Flush無效,將MemoryStream寫入兩個目標
- 13. LogHandler flush vs直接輸出發佈
- 14. OpenMP flush與flush(列表)
- 15. Collectors.toList()中的LongStream VS Stream的差異
- 16. 處理CryptoStream vs處理底層Stream?
- 17. BinaryWriter(Stream stream)在BinaryWriter.Dispose()上處理流嗎?
- 18. Put()vs Flush()在Kafka連接器接收器任務
- 19. Hibernate flush()和Cascade.PERSIST
- 20. WAMP和flush()
- 21. JPA EntityTransaction flush
- 22. Libevent bufferevent socket flush
- 23. Node.js stdout flush
- 24. Symfony2 flush()實體
- 25. javascript flush文本
- 26. android flush sqlite表
- 27. asp.net tracing without flush
- 28. flush in java.io.FileWriter
- 29. QDataStream和Flush
- 30. 函數getHibernateTemplate()。flush()
是的,它可以是非常廣泛的,因爲它實際上將數據寫入底層媒體。你可以寫很多數據或者媒體可能很慢(例如網絡),或者中間可能有一些抽象層,在有效寫入之前會做進一步的處理。它可以像其他任何寫作操作一樣廣泛。 –
您應該將其作爲答案發布。 – Gigi
好的,我做到了(我試圖擴大一點點)。 –