Что ж, я полагаю, что текущая реализация MemoryStream
всегда будет заполнять буфер, если это возможно - если только у вас нет какого-то злого класса, полученного из него. Хотя это не гарантировано, насколько я вижу. Документация даже содержит предупреждение:
Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.
Лично я всегда защищал бы это, если только это не облегчит намного . Вы никогда не знаете, когда кто-то изменит тип потока, и не заметите, что произошло.
Обычно с MemoryStream
я хочу, чтобы все байты были одновременно: поэтому я вызываю MemoryStream.ToArray
. Это гарантированно сработает, и если кто-то изменит код, чтобы не использовать MemoryStream
, он не сможет скомпилироваться, так как этот член только на MemoryStream
. Для общих потоков я использую служебный метод, который полностью читает из потока и возвращает байтовый массив.