我正在从NetworkStream
的TcpClient
获取数据,并且我想将数据写入固定长度的MemoryStream
,因为我知道数据的大小。
我使用Stream.CopyToAsync
将数据写入MemoryStream
:
var result = new MemoryStream(size);
await ns.CopyToAsync(result);
result.Position = 0;
return result;
看source code的Stream.CopyToAsync
,当源流中没有数据时,该方法终止。在我的情况下,当网络连接缓慢或中断时,我的方法将返回不完整的MemoryStream
。
我是否可以忽略这种可能性,或者因为我知道将发送多少数据,所以我应该自己读取流吗?
由于NetworkStream.Read
将阻塞1直到有数据,并且仅在关闭连接时才返回0
,所以我认为这比CopyToAsync
更好地满足您的需求。
由于您已经知道要接收多少数据,所以我建议您仅检查MemoryStream
是否具有所需的长度:
https://stackoverflow.com/a/6958290/3181933var result = new MemoryStream(size); await ns.CopyToAsync(result); if (result.Length != size) { // it didn't load everything } result.Position = 0; return result;
1