我应该使用Stream.CopyToAsync()从网络流中复制数据吗?

问题描述 投票:0回答:1

我正在从NetworkStreamTcpClient获取数据,并且我想将数据写入固定长度的MemoryStream,因为我知道数据的大小。

我使用Stream.CopyToAsync将数据写入MemoryStream

var result = new MemoryStream(size);
await ns.CopyToAsync(result);
result.Position = 0;

return result;

source codeStream.CopyToAsync,当源流中没有数据时,该方法终止。在我的情况下,当网络连接缓慢或中断时,我的方法将返回不完整的MemoryStream

我是否可以忽略这种可能性,或者因为我知道将发送多少数据,所以我应该自己读取流吗?

c# stream .net-standard memorystream networkstream
1个回答
1
投票

由于NetworkStream.Read将阻塞1直到有数据,并且仅在关闭连接时才返回0,所以我认为这比CopyToAsync更好地满足您的需求。

由于您已经知道要接收多少数据,所以我建议您仅检查MemoryStream是否具有所需的长度:

var result = new MemoryStream(size);
await ns.CopyToAsync(result);

if (result.Length != size) {
     // it didn't load everything
}

result.Position = 0;

return result;

1

https://stackoverflow.com/a/6958290/3181933
© www.soinside.com 2019 - 2024. All rights reserved.