Просто сделайте:
byte[] allData = read1.ReadBytes(int.MaxValue);
В документации говорится, что он будет читать все байты, пока не будет достигнут конец потока.
Обновление
Хотя это кажется элегантным, и документация, кажется, указывает, что это будет работать, фактическая реализация (проверено в .NET 2, 3.5 и 4) выделяет полноразмерный байтовый массив для данных , что, вероятно, вызовет OutOfMemoryException
в 32-битной системе.
Поэтому я бы сказал, что на самом деле не существует элегантного способа .
Вместо этого я бы порекомендовал следующий вариант ответа @ iano. Этот вариант не зависит от .NET 4:
Создайте метод расширения для BinaryReader
(или Stream
, код для обоих одинаков).
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();
}
}