Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
StreamReader.DiscardBufferedData, méthode
Efface la mémoire tampon interne.
Assembly : mscorlib (dans mscorlib.dll)
Utilisez la méthode DiscardBufferedData pour réinitialiser la mémoire tampon interne de l'objet StreamReader. Vous devez appeler cette méthode uniquement lorsque la position de la mémoire tampon interne et le BaseStream ne correspondent pas. Ces positions peuvent être assorties de manière incorrecte lorsque vous lisez des données dans la mémoire tampon et que vous recherchez une nouvelle position dans le flux sous-jacent. Cette méthode ralentit les performances et doit être utilisée uniquement en cas d'absolue nécessité, notamment lorsque vous souhaitez lire plusieurs fois une partie du contenu d'un objet StreamReader.
Pour obtenir la liste des tâches d'E/S courantes, consultez Tâches d'E/S courantes.
L'exemple suivant affiche un scénario dans laquelle la méthode DiscardBufferedData doit être appelée pour synchroniser la mémoire tampon interne et le flux sous-jacent. Le fichier dans l'exemple est utilisé pour illustrer la position et se compose de l' abcdefghijklmnopqrstuvwxyz du texte. En appelant DiscardBufferedData une fois les données lues, l'exemple fonctionne comme prévu. Une fois que les 15 premiers caractères sont lus, la position est réinitialisée à la valeur de décalage de 2 et tous les caractères restants sont lus. Si vous supprimez l'appel à DiscardBufferedData, l'exemple ne fonctionne pas comme attendu. Les 15 premiers caractères sont lus, mais seule la position du flux sous-jacent est réinitialisée. La mémoire tampon interne de l'objet StreamReader est encore sur le 16e caractère. Par conséquent, ReadToEnd retourne tous les caractères dans la mémoire tampon plus les caractères dans le flux sous-jacent qui démarre à partir de la position de remise à zéro.
using System; using System.IO; class Test { public static void Main() { string path = @"c:\temp\alphabet.txt"; using (StreamReader sr = new StreamReader(path)) { char[] c = null; c = new char[15]; sr.Read(c, 0, c.Length); Console.WriteLine("first 15 characters:"); Console.WriteLine(c); // writes - "abcdefghijklmno" sr.DiscardBufferedData(); sr.BaseStream.Seek(2, SeekOrigin.Begin); Console.WriteLine("\nBack to offset 2 and read to end: "); Console.WriteLine(sr.ReadToEnd()); // writes - "cdefghijklmnopqrstuvwxyz" // without DiscardBufferedData, writes - "pqrstuvwxyzcdefghijklmnopqrstuvwxyz" } } }
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.