write visual read ejemplos create clase archivo abrir c# stream

c# - visual - Leer datos en FileStream en una secuencia genérica



read file stream c# (4)

¿Cuál es la forma más eficiente de leer una transmisión en otra transmisión? En este caso, estoy tratando de leer datos en un Filestream en una secuencia genérica. Sé que podría hacer lo siguiente:
1. leer línea por línea y escribir los datos en la secuencia
2. lee trozos de bytes y escribe en la secuencia
3. etc

Solo estoy tratando de encontrar la forma más eficiente.

Gracias


Stephen Toub analiza una secuencia de flujo en su columna MSDN .NET matters aquí . En el artículo, describe un método CopyStream () que copia de una secuencia de entrada a otra secuencia. Esto suena bastante similar a lo que estás tratando de hacer.


Supongo que por transmisión genérica, te refieres a cualquier otro tipo de transmisión, como una secuencia de memoria, etc.

Si es así, la forma más eficiente es leer trozos de bytes y escribirlos en la secuencia de destinatarios. El tamaño del fragmento puede ser algo así como 512 bytes.


Lancé un método de extensión rápido (por lo tanto VS 2008 con 3.5 solamente):

public static class StreamCopier { private const long DefaultStreamChunkSize = 0x1000; public static void CopyTo(this Stream from, Stream to) { if (!from.CanRead || !to.CanWrite) { return; } var buffer = from.CanSeek ? new byte[from.Length] : new byte[DefaultStreamChunkSize]; int read; while ((read = from.Read(buffer, 0, buffer.Length)) > 0) { to.Write(buffer, 0, read); } } }

Se puede usar así:

using (var input = File.OpenRead(@"C:/wrnpc12.txt")) using (var output = File.OpenWrite(@"C:/wrnpc12.bak")) { input.CopyTo(output); }

También puede cambiar ligeramente la lógica y escribir también un método CopyFrom() .


Leer un búfer de bytes y luego escribirlo es más rápido. Los métodos como ReadLine() necesitan buscar delimitadores de línea, lo que lleva más tiempo que llenar un búfer.