110 votes

Utiliser les flux

Les ruisseaux sont un peu mystérieux pour moi. Je ne sais pas quand utiliser quel flux et comment les utiliser. Quelqu'un peut-il m'expliquer comment les flux sont utilisés? Si je comprends bien, il existe trois types de flux: stream, read stream et write stream. Est-ce correct? Et quelle est par exemple la différence entre un Memorystream et un FileStream?

74voto

ArsenMkrt Points 24447

Un flux est un objet utilisé pour transférer des données.Très souvent, à l'extérieur de la source d'un fichier , dans ce cas, vous devrez utiliser FileStream, mais qui n'est pas nécessairement le cas. Par exemple MemoryStream est utilisé pour stocker des données dans la mémoire et du Système.Net.Les Sockets.NetworkStream poignées de données sur le réseau.Il y a un générique classe de flux,Système.IO.Flux, à partir de laquelle tous les flux sont dérivées. Lecteur graveur flux de StreamReader et StreamWriter ne sont pas des flux de par leur méchante, ils ne sont pas dérivées du Système.IO.Flux, ils sont conçus pour aider à écrire et lire des données à partir et à diffuser!

55voto

Tim Williams Points 118

Pour développer un peu sur d'autres réponses ici, et de contribuer à expliquer beaucoup de l'exemple de code, vous verrez parsèment, la plupart du temps vous n'avez pas de lire et d'écrire à un flux de données directement. Les ruisseaux sont un faible niveau moyen de transfert de données.

Vous remarquerez que les fonctions de lecture et d'écriture sont tous les octets orienté, par exemple WriteByte(). Il n'y a pas de fonctions pour traiter avec des entiers, des chaînes, etc. Cela rend le flux très polyvalent, mais moins simple de travailler avec des si, par exemple, vous voulez juste pour transférer du texte.

Cependant, .NET fournit des classes qui la conversion entre les types natifs et le faible niveau de l'interface de flux, et transfère les données vers ou à partir du flux de données pour vous. Parmi ces classes sont:

StreamWriter // Badly named. Should be TextWriter and TextReader
StreamReader //
BinaryWriter
BinaryReader

Pour les utiliser, tout d'abord vous acquérir votre flux, vous créez de l'une des classes ci-dessus et de l'associer avec le cours d'eau. E. g.

MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);

StreamReader et StreamWriter la conversion entre les types natifs et leurs représentations de chaîne puis de transférer les cordes vers et à partir du flux d'octets. Donc

myStreamWriter.Write(123);

va écrire "123" (trois caractères '1', '2' et '3') pour le flux. Si vous travaillez avec des fichiers de texte (par exemple html), StreamReader et StreamWriter sont les classes que vous utiliseriez.

Alors que

myBinaryWriter.Write(123);

va écrire quatre octets représentant l'entier de 32 bits de la valeur 123 (0x7B, 0x00, 0x00, 0x00). Si vous travaillez avec des fichiers binaires ou les 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 post.)

21voto

meatvest Points 426

Les flux permettent de traiter de grandes quantités de données. Lorsqu'il n'est pas pratique de charger toutes les données en mémoire en même temps, vous pouvez les ouvrir en tant que flux et travailler avec de petites parties de celui-ci.

4voto

AnthonyWJones Points 122520

Il y a un seul type de base de l' Stream. Cependant, dans diverses circonstances, certains membres lèvera une exception lorsqu'il est appelé parce que, dans ce contexte, l'opération n'était pas disponible.

Par exemple, un MemoryStream est tout simplement une façon de se déplace octets dans et hors d'une partie de la mémoire. Par conséquent, vous pouvez appeler de Lire et d'Écrire sur elle.

D'autre part, une FileStream vous permet de lire ou d'écrire (ou les deux) à partir de/vers un fichier. Si vous pouvez réellement Lire ou Écrire dépend de la façon dont le fichier a été ouvert. Vous ne pouvez pas Écrire dans un fichier seulement si vous ouvert pour un accès en Lecture.

3voto

Robban Points 2984

Je commencerais par lire les flux sur MSDN: http://msdn.microsoft.com/en-us/library/system.io.stream.aspx

Memorystream et FileStream sont des flux utilisés pour utiliser respectivement la mémoire brute et les fichiers ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X