2010-03-22 16 views

cevap

13

Hayır, akışlar genellikle bir tür yerel kaynaklara (bir soket, bir dosya tanıtıcısı, vb.) Başvururlar ve böylece klonlanamaz veya serileştirilemezler. Ayrıca, birçok akış ileriye dönükdür ve arama yapılmasını desteklemez, böylece bir akıştan yeniden okuyamayabilirsiniz bile.

Okunabilir bir akıştan neler yapabilirsiniz, ancak bir bayt dizisi olarak taşınabilecek MemoryStream'e kopyalayın.

Bunun nasıl gösteren bir kod parçacığı için aşağıdaki yayınlara bakın: 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

Akış, .NET 4'ten beri bir CopyTo yöntemine sahiptir. – Alex

+1

Eklendiğini bilmek güzel, teşekkürler! O zamanlar yoktu. – Josh

1

Hayır, genel akışı klonlanamaz.

3

Hayır. Klonlama, Stream sınıfında genellikle desteklenen bir işlem değildir. Bunun için Stream sınıfının tüm olası uygulamalarını kapsaması gerekir.

Bu, FileStream gibi öğeler için yapılabilir, ancak bunun NetworkStream için ne anlama geldiğini düşünebilirsiniz. Klonlama genellikle yaratılış noktasında özdeş olan tamamen ayrı nesneler oluşturma kavramına sahiptir. Bu, genellikle bir bağlantı noktasında NetworkStream'a sarılmış TCP bağlantıları gibi öğeler üzerinde gerçekleştirilemez.

+0

Bu doğru ama zaten bazı Stream uygulamaları NotSupportedException atma bazı işlevleri desteklemiyor gibi .. aynı klonlama söz konusu olduğunda yapılmış olabilir. – rafek

İlgili konular