我正在尝试使用HttpClient.GetStreamAsync()
方法下载文件。但是这里有一个问题。 GetStreamAsync()
方法返回readonly流,因此我不能使用Length
属性来声明我尝试读取字节的字节数组缓冲区。
using (var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false))
{
// it fails at file.Length below
byte[] blob = new byte[file.Length];
await file.ReadAsync(blob, 0, (int)file.Length).ConfigureAwait(false);
}
答案 0 :(得分:3)
您可以将其读入MemoryStream
并从那里获取字节数组:
using (var file = await _httpClient.GetStreamAsync(url).ConfigureAwait(false))
using (var memoryStream = new MemoryStream())
{
await file.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
答案 1 :(得分:-1)
我想提出一个可能更简单/更清晰的斯蒂芬答案的变体:
>>> num = list(range(10000))
>>> target = num[-1] + num[-2]
>>> %timeit twosum(num, target)
12.3 s ± 276 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
>>> %timeit twosum_O_n(num, target)
1.44 ms ± 21.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
这还有一个额外的好处,即 using var httpResponse = await _httpClient.GetAsync(url).ConfigureAwait(false);
return await httpResponse.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
接受用于正常取消场景的取消令牌,而 GetAsync
不接受,并且它还允许您根据需要检查请求的状态代码。