Quelle est la différence entre l'appel de Stream.Write et l'utilisation d'un StreamWriter?

Quelle est la différence entre l'instanciation d'un Stream objet, comme MemoryStream et l'appel de la memoryStream.Write() méthode pour écrire dans le flux, et l'instanciation d'un StreamWriter objet avec le cours d'eau et de l'appel de streamWriter.Write()?

Envisagez le scénario suivant:

Vous avez une méthode qui prend un Ruisseau, écrit une valeur, et le renvoie. Le flux est lu à partir de la suite, donc la position doit être réinitialisé. Il y a deux façons de le faire (les deux semblent fonctionner).

//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;
}

C'est en partie à une portée de problème, car je ne veux pas fermer le flux de données après avoir écrit pour elle car elle sera lue à partir plus tard. J'ai aussi ne veux certainement pas à jeter non plus, parce que cela va fermer mon stream. La différence semble être que vous n'utilisez pas un StreamWriter introduit une dépendance directe à l'Encodage.Par défaut, mais je ne suis pas sûr que c'est une très grosse affaire. Quelle est la différence, le cas échéant?

source d'informationauteur John Nelson