roja - ¿Cómo escribir el contenido de una secuencia en otra secuencia en.net?
linea roja adobe premiere (6)
A menudo me encuentro con el problema de que tengo una secuencia llena de datos y quiero escribir todo en otra secuencia.
Todos los ejemplos de código utilizan un búfer en forma de una matriz de bytes.
¿Hay una forma más elegante de esto?
Si no, ¿cuál es el tamaño ideal del buffer? ¿Qué factores componen este valor?
No estoy seguro de si puede canalizar directamente una secuencia a otra en .NET, pero aquí hay un método para hacerlo con un buffer intermedio de bytes. El tamaño del buffer es arbitrario. El tamaño más eficiente dependerá principalmente de la cantidad de datos que transfiere.
static void CopyStream(Stream input, Stream output){
byte[] buffer = new byte[0x1000];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
output.Write(buffer, 0, read);
}
Respecto al tamaño de buffer ideal:
"Cuando se usa el método Read, es más eficiente usar un búfer que tenga el mismo tamaño que el búfer interno de la transmisión, donde el búfer interno se establece en el tamaño de bloque deseado, y que siempre lea menos que el tamaño del bloque. Si el tamaño del búfer interno no se especificó cuando se construyó la secuencia, su tamaño predeterminado es 4 kilobytes (4096 bytes) ".
Cualquier proceso de lectura de flujo usará Read (char buffer [], int index, count), que es el método al que se refiere esta cita.
http://msdn.microsoft.com/en-us/library/9kstw824.aspx (debajo de "Comentarios").
No conozco una forma más elegante que usar un buffer.
Pero el tamaño de un buffer puede hacer la diferencia. ¿Recuerdas los problemas sobre la copia de archivo de Vista? Su motivo fue (básicamente) cambiar el tamaño del búfer. Los cambios se explican en este blogpost . Puedes aprender los principales factores de esa publicación. Sin embargo, esto solo se aplica a la copia de archivos. En aplicaciones, probablemente haga muchas copias de memoria, por lo que en ese caso, el 4KB podría ser el mejor tamaño de búfer, tal como lo recomienda la documentación de .NET .
BufferedStream.CopyTo (Stream)
¡En .NET 4.0 finalmente obtuvimos un método Stream.CopyTo
! ¡Hurra!
Leer datos en FileStream en una secuencia genérica
probablemente tenga algunas instrucciones para entrar