Réponse originale (lire la mise à jour ci-dessous !)
Il suffit de le faire :
byte[] allData = read1.ReadBytes(int.MaxValue);
El documentation dit qu'il va lire tous les octets jusqu'à ce que la fin du flux soit atteinte.
Mise à jour
Bien que cela semble élégant, et que la documentation semble indiquer que cela fonctionnerait, la réalité est la suivante mise en œuvre (vérifié dans .NET 2, 3.5 et 4) alloue un tableau d'octets de taille complète pour les données, ce qui causera probablement un problème d'erreur d'affichage. OutOfMemoryException
sur un système 32 bits.
Par conséquent, je dirais qu'en fait il n'y a pas de moyen élégant .
Au lieu de cela, je recommanderais la variante suivante de la réponse d'@iano. Cette variante ne repose pas sur .NET 4 :
Créer une méthode d'extension pour BinaryReader
(ou Stream
le code est le même pour les deux).
public static byte[] ReadAllBytes(this BinaryReader reader)
{
const int bufferSize = 4096;
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[bufferSize];
int count;
while ((count = reader.Read(buffer, 0, buffer.Length)) != 0)
ms.Write(buffer, 0, count);
return ms.ToArray();
}
}
2 votes
Je pense qu'après tout, c'est le moyen le plus élégant.