At construction, a Message object is first decoded from the ReadBuffer object passed to CreateAsync and made available through the Message property. Afterwards, a call to any of the Read methods of this stream removes data from ReadBuffer object passed to the CreateAsync. The data is then decoded and the decoded form is then returned.
If a message contains multiple packets, their payload is automatically joined such that it can be read through this stream as if the message consisted of only one packet.