2011-02-10 302 views

回答

79

dotnet中FileStream和StreamWriter有什麼不同?

A FileStreamStream。像所有Streams一樣,它只處理byte[]數據。

A StreamWriter : TextWriter,是一個Stream-decorator。 TextWriter將字符串或字符的文本數據編碼爲byte[],然後將其寫入鏈接的Stream

你應該使用哪種上下文?他們的優點和劣勢是什麼?

當您有byte[]數據時,您使用一個空的FileStream。當你想寫文本時,你添加一個StreamWriter。使用格式化程序或序列化程序來編寫更復雜的數據。

是否可以將這兩個結合爲一個?

是的。你總是需要一個Stream來創建一個StreamWriter。輔助方法System.IO.File.CreateText("path")將組合創建它們,然後您只需Dispose()外部寫入器。

+1

同樣重要的是要注意`FileStream`是一種類型的流,專門針對文件。 Streams本地處理字節,但是`StreamWriter`/Reader將在任何*流上寫入/讀取文本,而不僅僅是`FileStream`。例如,`MemoryStreams`,`NetworkStreams`等。 – iliketocode 2017-04-12 03:03:58

18

FileStream寫入字節,StreamWriter寫入文本。就這樣。

+11

其實,這不是「全部」......但這是一個正確的區別。 – David 2011-02-10 23:02:58

7

那麼從MSDN的FileStream

在文件周圍公開流,支持同步和異步讀寫操作。

和MSDN爲StreamWriter

實現用於在一個特定的編碼寫入字符到一個流一個TextWriter。

最明顯的區別是FileStream允許讀/寫操作,而StreamWriter是隻寫的。

StreamWriter頁接着補充:

的StreamWriter被設計用於在特定的編碼字符輸出,而從流導出類被設計爲字節輸入和輸出。

因此,第二個區別是FileStream是用於字節,而StreamWriter用於文本。

5

它們是用於向已知數據源輸出信息的兩個不同級別。

FileStream是Stream的一種類型,它在概念上是一種指向某個位置並可以處理來往和來自該位置的傳入和/或傳出數據的機制。存在用於讀/寫文件,網絡連接,內存,管道,控制檯,調試和跟蹤監聽器以及其他幾種數據源的流。具體來說,存在一個FileStream來執行讀取和寫入文件系統。大多數數據流在使用時都非常低級,並將數據作爲字節來處理。

StreamWriter是一個Stream的包裝器,它簡化了使用該流輸出純文本。它公開的是一些採用字符串而不是字節的方法,並對字節數組進行必要的轉換。還有其他作家;另一個主要使用的是XmlTextWriter,它便於以XML格式編寫數據。也有讀者對應的作家,類似地包裝一個流,並方便獲取數據。

0

一個關鍵區別(除了上面的註釋),可能是FileStream支持隨機磁盤讀取和寫入任何指定的FileStream.Position。對於大文件修改,這可能是非常寶貴的。