2012-05-06 34 views
2

在編寫對潛在的無限「數據流」(即字節,字符,或任何操作)的函數時,決定使用字符串/數組與輸入/輸出?C#數組與數據流

總是使用流編寫函數,然後使用流包裝(即StringReader/Writer)的重載方法返回像數組或字符串那樣的「簡單數據」,並且不需要處理其他考慮?

我認爲在數組上操作的函數要方便得多,因爲你可以「返回」一個結果數組,你通常不必擔心處置。我假設流操作符很好,因爲它們可以在無限的數據源上操作,也可能是內存有效的。

+0

無論使用什麼類型的集合或流類(LinkedList除外)最終都歸結爲核心的byte []。機器支持的基本和唯一的收集類型。這當然可以是一個痛苦的阻抗不匹配,總是更好地使用工具箱中的那些,並已經這樣做。 –

回答

1

如果您正在處理未知大小的二進制數據,請始終使用流。例如,將整個文件讀入一個字節數組通常是個壞主意,如果可以避免的話。 .Net中與加密和壓縮等二進制數據一起工作的大多數功能都是使用流作爲輸入/輸出。

1

如果您正在編寫處理數據流的函數,那麼爲什麼不把它作爲IEnumerable<T>來傳遞。然後您可以在生成器函數中將一個流作爲IEnumerable<T>返回。換句話說,使用return yield來返回每個結果一個時間。

由於評估是根據需要完成的,因此在某些情況下,您最終可能會獲得性能漸近改進。

+0

我這樣做是爲了對內存中的對象集合(即引用類型)進行操作的函數,但我不確定我喜歡用這種方法在基元上操作的想法。例如,如果流設計爲省略某些模式,則必須實現多於必需的循環,因爲您無法一次返回一堆值。 –