2008-12-01 12 views
3

J'utilise System.IO.Stream.Read(byte[] buffer, int offset, int count). Y at-il une alternative à cette méthode (ou une propriété à définir) de sorte que la méthode ne retournera pas tant que count n'est pas lu (ou que la fin du flux est atteinte)? Ou dois-je faire quelque chose comme ceci:Blocage de la version de System.IO.Stream.Read (byte [], int, int)

int n = 0, readCount = 0; 
while ((n = myStream.Read(buffer, readCount, countToRead - readCount)) > 0) 
    readCount += n; 

Répondre

9

BinaryReader.ReadBytes blocs de la manière souhaitée. Ce n'est pas équivalent à lire à la fin du flux, cependant. (Vous ne voulez pas appeler BinarReader.ReadBytes(int.MaxValue) - il va essayer de créer un tampon de 2 Go!)

J'ai tendance à utiliser un MemoryStream pour lire toutes les données d'un flux de taille inconnue. Voir this related question pour l'exemple de code.