Qual è la differenza tra l'istanziazione di un oggetto MemoryStream
e il memoryStream.Write()
metodo per scrivere nello stream e la creazione di istanza di un oggetto con lo streaming e la chiamata streamWriter.Write()
?Qual è la differenza tra chiamare Stream.Write e utilizzare StreamWriter?
Si consideri il seguente scenario:
Si dispone di un metodo che accetta un flusso, scrive un valore, e lo restituisce. Il flusso viene letto da un momento successivo, quindi la posizione deve essere ripristinata. Ci sono due modi possibili per farlo (entrambi sembrano funzionare).
// Instantiate a MemoryStream somewhere
// - Passed to the following two methods
MemoryStream memoryStream = new MemoryStream();
// Not using a StreamWriter
private static Stream WriteToStream(Stream stream, string value)
{
stream.Write(Encoding.Default.GetBytes(value), 0, value.Length);
stream.Flush();
stream.Position = 0;
return stream;
}
// Using a StreamWriter
private static Stream WriteToStreamWithWriter(Stream stream, string value)
{
StreamWriter sw = new StreamWriter(stream);
sw.Write(value, 0, value.Length);
sw.Flush();
stream.Position = 0;
return stream;
}
Questo è in parte un problema ambito, come io non voglio chiudere il flusso dopo aver scritto ad esso dal momento che sarà letto da un secondo momento. Anche io certamente non voglio eliminarlo, perché questo chiuderà il mio stream. La differenza sembra essere che non usare uno StreamWriter introduce una dipendenza diretta su Encoding.Default, ma non sono sicuro che sia un grosso problema. Qual è la differenza, se del caso?
StreamWriter discende da TextWriter, non da Stream. Sarebbe corretto dire che StreamWriter è un adattatore tra Stream e TextWriter, invece. – nlaq