Pour développer un peu d'autres réponses ici, et aider à expliquer une grande partie de l'exemple de code que vous verrez en pointillés, la plupart du temps, vous ne lisez et n'écrivez pas directement dans un flux. Les flux sont un moyen de bas niveau pour transférer des données.
Vous remarquerez que les fonctions de lecture et d'écriture sont toutes orientées octets, par exemple WriteByte (). Il n'y a pas de fonctions pour traiter les entiers, les chaînes, etc. Cela rend le flux très polyvalent, mais moins simple à utiliser si, par exemple, vous voulez simplement transférer du texte.
Cependant, .NET fournit des classes qui convertissent entre les types natifs et l'interface de flux de bas niveau, et transfère les données vers ou depuis le flux pour vous. Certaines de ces classes notables sont:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
Pour les utiliser, vous devez d'abord acquérir votre flux, puis créer l'une des classes ci-dessus et l'associer au flux. Par exemple
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader et StreamWriter convertissent entre les types natifs et leurs représentations sous forme de chaîne, puis transfèrent les chaînes vers et depuis le flux sous forme d'octets. Alors
myStreamWriter.Write(123);
écrira «123» (trois caractères «1», «2» puis «3») dans le flux. Si vous avez affaire à des fichiers texte (par exemple html), StreamReader et StreamWriter sont les classes que vous utiliseriez.
Tandis que
myBinaryWriter.Write(123);
écrira quatre octets représentant la valeur entière de 32 bits 123 (0x7B, 0x00, 0x00, 0x00). Si vous avez affaire à des fichiers binaires ou à des protocoles réseau, BinaryReader et BinaryWriter sont ce que vous pouvez utiliser. (Si vous échangez des données avec des réseaux ou d'autres systèmes, vous devez être conscient de l' endianness , mais c'est un autre article.)