我应该使用 Stream.CopyToAsync() 从网络流中复制数据吗?
Should I use Stream.CopyToAsync() to copy data from a network stream?
我正在从一个TcpClient
的NetworkStream
获取数据,我想将数据写入一个固定长度的MemoryStream
,因为我知道数据的大小。
我用Stream.CopyToAsync
把数据写入MemoryStream
:
var result = new MemoryStream(size);
await ns.CopyToAsync(result);
result.Position = 0;
return result;
查看 Stream.CopyToAsync
的 source code,当源流中没有数据时,该方法终止。就我而言,当网络连接缓慢或中断时,我的方法将 return 不完整 MemoryStream
。
我可以忽略这种可能性还是应该自己读取流,因为我知道将发送多少数据?
因为 NetworkStream.Read
会阻塞 1 直到有数据,只有 return 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
我正在从一个TcpClient
的NetworkStream
获取数据,我想将数据写入一个固定长度的MemoryStream
,因为我知道数据的大小。
我用Stream.CopyToAsync
把数据写入MemoryStream
:
var result = new MemoryStream(size);
await ns.CopyToAsync(result);
result.Position = 0;
return result;
查看 Stream.CopyToAsync
的 source code,当源流中没有数据时,该方法终止。就我而言,当网络连接缓慢或中断时,我的方法将 return 不完整 MemoryStream
。
我可以忽略这种可能性还是应该自己读取流,因为我知道将发送多少数据?
因为 NetworkStream.Read
会阻塞 1 直到有数据,只有 return 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