2010-03-22 217 views

回答

13

不,流通常是指某種類型的本地資源(一個套接字,一個文件句柄等),所以它們不能被克隆或序列化。此外,許多數據流僅支持前向,並且不支持查找,因此您甚至無法從流中重新讀取數據。

你可以從一個可讀的流中做什麼,但是將它複製到一個可以作爲字節數組移動的MemoryStream中。

請參閱以下職位說明如何做到這一點的代碼片段: How do I copy the contents of one stream to another?

public static void CopyStream(Stream input, Stream output) 
{ 
    byte[] buffer = new byte[32768]; 
    while (true) 
    { 
     int read = input.Read (buffer, 0, buffer.Length); 
     if (read <= 0) 
      return; 
     output.Write (buffer, 0, read); 
    } 
} 
+11

Stream自從.NET 4以來有了一個CopyTo方法4 – Alex 2012-04-25 12:31:36

+1

很高興知道已添加,謝謝!當時,它沒有。 – Josh 2012-05-25 19:12:05

1

不,你不能克隆的通用流。

3

否。克隆不是在Stream類中通常支持的操作。要這樣,它將不得不包含Stream類的所有可能的實現。

這可能適用於像FileStream這樣的項目,但請考慮這對於說NetworkStream這意味着什麼。克隆通常具有創建完全獨立的對象的概念,這些對象在創建時是相同的。這通常不適用於像TCP連接這樣的項目,這些項目通常在某個級別包裝在NetworkStream中。

+0

這是真的,但它已經像一些Stream實現不支持某些引發NotSupportedException的功能。如果涉及到克隆,可能也會做同樣的事情。 – rafek 2013-05-15 09:24:25

相關問題