gpt4 book ai didi

c# - 当您不知道长度时,如何使用 ReadAsync 方法获取从 sslsteam 接收的字节长度?

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:49 26 4
gpt4 key购买 nike

我正在使用下面的异步方法从服务器获取响应。根据请求类型,我从服务器获得的响应从 1200 字节到 1500 字节不等。所以,我无法修复缓冲区的大小。

SslStream.ReadAsync 有什么方法可以获取接收到的原始字节的长度吗?

byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);

我尝试使用下面的代码,但出现异常:

This stream don't support seek operations.

await _sslStream.ReadAsync(Buffer, 0, (int)_sslStream.Length);

早些时候,我使用了BeginRead/EndRead。这样我就得到了缓冲区的原始大小,但 Async await 看起来更干净了。因此,我想检查是否可以使用 ReadAsync 获取长度。

最佳答案

异常清楚地说:

This stream don't support seek operations.

首先,我不明白为什么你不能使用更大的缓冲区:

byte[] Buffer = new byte[1500];    
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);

如果流中的数据少于缓冲区可以容纳的数据,则只会加载缓冲区的一部分。也许你不知道,但是你可以得到read bytes的值:

byte[] Buffer = new byte[1500];    
var bytesRead = await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);

然后您可以创建自己的缓冲区,正好适合读取数据的长度:

byte[] bufferThatFitsData = new byte[bytesRead];
Array.Copy(buffer, 0, bufferThatFitsData, 0, bytesRead);

现在,bufferThatFitsData 的长度等于流的大小(假设不超过 1500 字节)。

关于c# - 当您不知道长度时,如何使用 ReadAsync 方法获取从 sslsteam 接收的字节长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com