当您不知道长度时,如何使用 ReadAsync 方法获取从 sslsteam 接收的字节长度?
How to get length of bytes received from sslsteam using ReadAsync method when you don't know the length?
我正在使用下面的异步方法从服务器获取响应。根据请求类型,我从服务器获得的响应从 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 字节)。
我正在使用下面的异步方法从服务器获取响应。根据请求类型,我从服务器获得的响应从 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 字节)。