2011-02-10 161 views
1

我遇到了幾個帖子,聲稱流不是可靠的數據結構,這意味着在所有情況下讀/寫操作都可能不會遵循。流可靠性

所以:

a)這個共識有什麼道理嗎?

b)若還等什麼在至極的情況下,讀/寫operaitions可能會失敗?

在流,我穿過,你可以通過讀/寫操作要高度重視循環,直到完整的理賠來了這樣的共識:

var bytesRead = 0; 
var _packet = new byte[8192];  
while ((bytesRead += file_reader.Read(_packet, bytesRead, _packet.Length - bytesRead)) < _packet.Length) ; 
+0

嗨,歡迎來到Stack Overflow。如果您遇到可以這樣或那樣的帖子,並在您的問題中提及這些帖子,請張貼指向這些帖子的鏈接,以便我們可以看到完整的上下文。也許這些帖子是錯誤的,也許有一些具體的案例,也許只是措辭是錯誤的。 – 2011-02-10 14:34:37

+0

你有沒有提及你遇到的帖子?在正確的時間不在流上調用「Flush」可能會導致意外的結果,取決於您的場景,缺少斷電或類似的情況(並且流在這種極端情況下與其他任何情況一樣可靠),當數據被刷新時該流被關閉。 – 2011-02-10 14:35:46

+0

請提供您找到的帖子的鏈接。我使用了`C#流可靠性`,而我發現的唯一一個帖子就是你的。 :)我編寫的代碼可以使用Stream對象處理多個Gigabyte大小的文件,而不會有任何問題。 – 2011-02-10 15:37:43

回答

2

如果按照文件,漁獲物和發生錯誤時採取相應的行動,我想你」會發現流是非常防彈的。有相當數量的代碼投入了這種可靠性。

我們可以看到鏈接到這些誰主張,否則?要麼你誤會了,要麼他們是不正確的。

3

那麼,您層認爲這是一個失敗這取決於你在談論,並在何種操作。例如,如果您嘗試讀取流尾(即,從只包含100個字節的文件中讀取1000個字節,或者從距離文件末尾較近的位置讀取1000個字節比1000),你會得到更少的字節。流讀取方法返回它們實際設法讀取的字節數,因此您應該檢查該值。

至於寫操作,寫入一個文件可能,如果磁盤已滿,或其他類似的問題失敗,但在執行寫入操作的情況下,你會得到一個異常。

如果你正在編寫到插座或其他網絡流,也不能保證,即使寫方法返回無例外情況,即另一端能夠接受它,有一噸的可以去錯沿問題方式。

然而,爲緩解您的顧慮,自己流不可靠。

他們談論的介質,但是,可以是。