我正在使用下面的异步方法来获取服务器的响应。我从服务器获得的响应根据请求类型从 1200 到 1500 字节不等。所以,我无法修复缓冲区的大小。
有没有办法从SslStream.ReadAsync
获得接收的原始字节的长度?
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
我尝试使用以下代码,但收到异常说:
此流不支持查找操作。
await _sslStream.ReadAsync(Buffer, 0, (int)_sslStream.Length);
早些时候,我使用了BeginRead
/EndRead
.有了它,我得到了缓冲区的原始大小,但异步等待看起来更干净。所以,我想检查是否可以使用 ReadAsync
获得长度。
说:
此流不支持查找操作。
首先,我不明白为什么你不能使用更大的缓冲区:
byte[] Buffer = new byte[1500];
await _sslStream.ReadAsync(Buffer, 0, Buffer.Length);
如果流具有缓冲区可以容纳的数据较少,则只会加载部分缓冲区。也许你不知道,但你可以得到读取字节的值:
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 字节)。