Well, I believe that the current implementation MemoryStreamwill always fill the buffer, if possible, if you do not have some kind of evil class derived from it. As far as I know, this is not guaranteed. The documentation contains a warning:
An implementation may return fewer bytes than requested, even if the end of the stream has not been reached.
Personally, I would always code it defensively if this does not simplify the situation. You never know when someone will change the type of stream and not notice what happened.
MemoryStream, , : MemoryStream.ToArray. , - , MemoryStream, MemoryStream. , .