2010-03-22 22 views

Respuesta

13

No, las secuencias usualmente se refieren a recursos locales de algún tipo (un socket, un manejador de archivo, etc.) y por eso no pueden ser clonados o ser serializados. Además, muchas transmisiones son solo para reenvío y no son compatibles con la búsqueda, por lo que es posible que ni siquiera pueda volver a leerlas desde una transmisión.

Lo que puede hacer desde una secuencia de lectura legible es copiarlo en un MemoryStream que se puede mover como una matriz de bytes.

Véase el siguiente post para un fragmento de código que muestra cómo hacer esto: 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 tiene un método CopyTo desde .NET 4 – Alex

+1

¡Es bueno saber que se ha agregado, gracias! En ese momento, no fue así. – Josh

1

No, no se puede clonar una secuencia genérica.

3

No. La clonación no es una operación generalmente admitida en la clase Stream. Para ser así, debería abarcar todas las implementaciones posibles de la clase Stream.

Esto puede ser factible para elementos como un FileStream, pero considere lo que esto significaría para un NetworkStream. La clonación generalmente tiene el concepto de crear objetos completamente separados que son idénticos en el punto de creación. En general, esto no se puede hacer en elementos como conexiones TCP que generalmente están envueltos en un NetworkStream en algún nivel.

+0

Es cierto, pero ya es como algunas implementaciones de Stream no admiten algunas funcionalidades lanzando NotSupportedException .. igual podría haberse hecho si se trata de clonación. – rafek

Cuestiones relacionadas