我們可以克隆一個Stream嗎?可以克隆.NET流嗎?
16
A
回答
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);
}
}
1
不,你不能克隆的通用流。
3
否。克隆不是在Stream
類中通常支持的操作。要這樣,它將不得不包含Stream
類的所有可能的實現。
這可能適用於像FileStream
這樣的項目,但請考慮這對於說NetworkStream
這意味着什麼。克隆通常具有創建完全獨立的對象的概念,這些對象在創建時是相同的。這通常不適用於像TCP連接這樣的項目,這些項目通常在某個級別包裝在NetworkStream
中。
+0
這是真的,但它已經像一些Stream實現不支持某些引發NotSupportedException的功能。如果涉及到克隆,可能也會做同樣的事情。 – rafek 2013-05-15 09:24:25
相關問題
- 1. 我可以優化Mercurial克隆嗎?
- 2. 我們可以克隆WebView嗎?
- 3. 你可以克隆GitLab片段嗎?
- 4. 可以克隆PHP生成器嗎?
- 5. 可以克隆droppable函數嗎?
- 6. .NET Hashtable的克隆
- 7. 是否可以克隆multimethod?
- 8. 是否可以克隆Z3_context?
- 9. 是否可以克隆AVPlayerLayer?
- 10. 可以在流產的Perfarce克隆後重建Perforce/Mercurial連接嗎?
- 11. .Net MemberwiseClone vs Java克隆
- 12. 克隆一個指針向量,我可以以某種方式克隆一個迭代器嗎?
- 13. 已經在使用的文件可以在VB.NET中克隆嗎?
- 14. git倉庫可以直接克隆到github賬戶嗎?
- 15. 我可以禁用Mercurial克隆/拉動HTTP嗎?
- 16. 你可以克隆Android操作系統映像嗎?
- 17. 我們可以深入克隆AngularJS中的事件對象嗎?
- 18. Git Chef-repo可以從廚師服務器克隆嗎?
- 19. 我可以克隆暫停的Docker容器嗎?
- 20. 我可以在Script.aculo.us的重影中自定義克隆嗎?
- 21. 使用JSON.stringify進行深度比較和克隆可以嗎?
- 22. 我可以克隆一個xml節點嗎?
- 23. 我可以使用Visual Studio克隆遠程github存儲庫嗎?
- 24. 你可以克隆Magento中的一個集合行嗎?
- 25. 可以使用--noupdate克隆Mecurial存儲庫及其subrepos嗎?
- 26. Prestashop可以用來構建一個craigslist克隆嗎?
- 27. 克隆()不可見
- 28. Git - 我可以推/拉,但不克隆
- 29. git克隆可以從http2中受益
- 30. iPhone開發 - 可以克隆ABRecord?
Stream自從.NET 4以來有了一個CopyTo方法4 – Alex 2012-04-25 12:31:36
很高興知道已添加,謝謝!當時,它沒有。 – Josh 2012-05-25 19:12:05