我希望能够从 C# 中的 TCP 网络流中获取可用数据的长度,以便在从网络流读取之前设置缓冲区的大小。有一个 NetworkStream.Length
属性,但尚未实现,我不想为缓冲区分配一个巨大的大小,因为它会占用太多空间。我想这样做的唯一方法是在数据传输之前用另一个告诉大小,但这似乎有点困惑。对我来说,执行此操作的最佳方式是什么。
最佳答案
访问时Stream
s ,您通常以小块(例如 1 千字节左右)的形式读取和写入数据,或者使用类似 CopyTo
的方法。那就是为你做的。
这是一个示例,使用 CopyTo
将一个流的内容复制到另一个流,并使用自动调整大小的方法将其作为 byte[]
返回缓冲区。
using (MemoryStream ms = new MemoryStream())
{
networkStream.CopyTo(ms);
return ms.ToArray();
}
这段代码以相同的方式读取数据,但更多的是手动读取,这可能更适合您使用,具体取决于您对数据的处理方式:
byte[] buffer = new byte[2048]; // read in chunks of 2KB
int bytesRead;
while((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0)
{
//do something with data in buffer, up to the size indicated by bytesRead
}
(这些代码片段的基础来自 Most efficient way of reading data from a stream )
关于c# - 获取 NetworkStream 中可用数据的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19387979/