#93 - Copiare il contenuto di uno Stream con un extension method
di Cristian Civera, in .NET Framework, 23 gennaio 2009
Archiviato in:
.NET Framework, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, Silverlight, Silverlight 2.0, XAML
La classe astratta Stream rappresenta un numero finito o infinito di byte che si possono leggere o scrivere con un approccio forward, cioè ogni lettura o scrittura scatenza l'avanzamento del cursor. Ne esistono varie implementazioni, le più importanti sono MemoryStream, FileStream e NetworkStream, e a seconda della tipologia è possibile leggere e/o scrivere, spostarsi avanti e indietro, e conoscerne la lunghezza.
Un'esigenza molto comune consiste nel dover copiare da uno Stream e scrivere su un altro, in genere da un file all'altro, oppure sul buffer di risposta di una pagina ASP.NET, oppure da uno Stream in memoria.
Per farlo esistono varie tecniche, ma la più performante lavora leggendo a gruppi di byte (solitamente di 4096 o 8192) dalla sorgente per poi scriverli sul target. Qualora sia possibile tenere aperti entrambi i lati, questa metodologia impiega meno risorse rispetto al caricare tutti i byte della sorgente in un array per poi scriverlo sulla destinazione, mentre diventa d'obbligo qualora la dimensione non è conosciuta a priori.
Lo script di oggi propone un extension method per effettuare questa operazione facilmente:
public static class StreamExtensions { public static void WriteToStream(this Stream source, Stream target, int bufferSize) { int i = 0; // Preparo il buffer della dimensione richiesta byte[] buffer = new byte[bufferSize]; // Ciciclamente riempio il buffer fino all'esaurimento while ((i = source.Read(buffer, 0, bufferSize)) > 0) { // Scrivo i byte letti sul target target.Write(buffer, 0, i); } } }
Approfondimenti
-
#45 - Comunicazione tra oggetti Silverlight nella stessa pagina
-
#98 - Mapping dell'ereditarietà con Table-Per-Type in Entity Framework
-
#36 - Gestire l'errore di caricamento dell'immagine in Silverlight 2.0
-
#147 - Gestire tutte le eccezioni in WPF
-
#55 - Blue Style CheckBox per Silverlight 2.0
-
ModelVirtualCasting: un'applicazione completa per .NET Framework 4.0 e Silverlight 4.0
-
Realizzare applicazioni web on the cloud con Microsoft Windows Azure
-
Template per generare classi POCO con Entity Framework 4.0
-
Mostrare la WebCam in Silverlight
-
Parallelizzare in Silverlight 2.0
-
Silverlight - Audio peak meter
-
#131 - Disegnare linee in una scena 3D WPF

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.