web-dev-qa-db-fra.com

Différence entre Buffer & Stream en C #

J'ai lu que Buffer est une séquence d'octets. Mais j'ai également lu que Stream est également une séquence d'octets. Alors, quelle est la différence entre Stream & Buffer?

13
Neel Maheta

Comme je l'ai dit dans mon commentaire, la différence entre un tampon et un flux est qu'un flux est une séquence qui transfère des informations depuis ou vers une source spécifiée, tandis qu'un tampon est une séquence d'octets qui est stockée en mémoire. Par exemple:

FileStream stream = new FileStream("filepath.txt", FileMode.OpenOrCreate);

Ouvre un flux vers un fichier. Ce flux peut être lu, écrit, ou les deux. Comme il ne nécessite pas de mémoire supplémentaire, il est léger et rapide, mais référencer arbitrairement un ensemble particulier de données dans la source peut être lourd. Les flux ont également l'avantage d'être une connexion plutôt qu'un ensemble discret de données, vous n'avez donc pas besoin de connaître la taille des données au préalable.

Inversement:

byte[] fileContents = File.ReadAllBytes("filepath.txt");

Lit tous les octets d'un fichier en mémoire. Ceci est pratique lorsque vous devez manipuler le fichier entier à la fois ou conserver une "copie locale" pour que votre programme puisse la conserver afin que le fichier puisse être libre pour d'autres utilisations. Cependant, en fonction de la taille de la source et de la quantité de mémoire disponible, un tampon contenant le fichier entier peut ne pas être une option.

Ce n'est qu'une explication simple, cependant. Il y en a de plus approfondis, par exemple, comme Marc Gravell le dit :

De nombreuses structures de données (listes, collections, etc.) agissent comme des conteneurs - elles contiennent un ensemble d'objets. Mais pas un ruisseau; si une liste est un seau, un flux est un tuyau. Vous pouvez extraire des données d'un flux ou pousser des données dans un flux - mais normalement une seule fois et dans un seul sens (il existe bien sûr des exceptions). Par exemple, TCP les données sur un réseau sont un flux; vous pouvez envoyer (ou recevoir) des morceaux de données, mais uniquement en connexion avec l'autre ordinateur, et généralement une seule fois - vous ne pouvez pas rembobiner Internet.

Les flux peuvent également manipuler les données qui les traversent; flux de compression, flux de chiffrement, etc. Mais encore une fois - la métaphore sous-jacente est ici un tuyau de données. Un fichier est également généralement accessible (à un certain niveau) en tant que flux; vous pouvez accéder à des blocs de données séquentielles. Bien sûr, la plupart des systèmes de fichiers fournissent également un accès aléatoire, donc les flux offrent des choses comme la recherche, la position, la longueur, etc. - mais toutes les implémentations ne le prennent pas en charge. Cela n'a aucun sens de rechercher des flux ou d'obtenir la longueur d'une socket ouverte.

11
Abion47

Un tampon a une taille/longueur spécifiée et est utilisé pour stocker des données. Le Stream, d'autre part, est utilisé pour lire et écrire des informations d'un endroit à un autre. Par exemple, FileStream est utilisé pour lire et écrire dans et depuis des fichiers, le flux lui-même a un tampon qui, lorsqu'il est rempli à sa taille maximale, est vidé et les données du flux sont lues ou écrites.

1
Givko