gpt4 book ai didi

c# - 使用 StreamReader 读取 HttpContent 流直到字符限制

转载 作者:行者123 更新时间:2023-11-30 21:57:00 32 4
gpt4 key购买 nike

我正在尝试将以下读取 HttpContent 的完整字符串响应的代码转换为字符串,以仅读取特定的最大字符数。现有代码:

private static async Task<string> GetContentStringAsync(HttpContent content)
{
string responseContent = await content.ReadAsStringAsync().ConfigureAwait(false);
return responseContent;
}

我现在的代码:

private static async Task<string> GetContentStringAsync(HttpContent content, int ResponseContentMaxLength)
{
string responseContent;
Stream responseStream = await content.ReadAsStreamAsync().ConfigureAwait(false);
using (StreamReader streamReader = new StreamReader(responseStream))
{
// responseContent = Data from streamReader until ResponseContentMaxLength
}

return responseContent;
}

我是 StreamReader 和 HttpContent 操作的新手。有没有办法做到这一点?

最佳答案

有多种方法可以做到这一点。但是,恕我直言,最简单的方法之一是创建一个 MemoryStream,您已在其中读取了所需的确切字节数,然后从该流中读取 StreamReader 对象而不是原来的。

例如:

private static async Task<string> GetContentStringAsync(HttpContent content, int ResponseContentMaxLength)
{
string responseContent;
Stream responseStream = await content.ReadAsStreamAsync().ConfigureAwait(false);

int totalBytesRead = 0;
byte[] buffer = new byte[ResponseContentMaxLength];

while (totalBytesRead < buffer.Length)
{
int bytesRead = await responseStream
.ReadAsync(buffer, totalBytesRead, buffer.Length - totalBytesRead);

if (bytesRead == 0)
{
// end-of-stream...can't read any more
break;
}

totalBytesRead += bytesRead;
}

MemoryStream tempStream = new MemoryStream(buffer, 0, totalBytesRead);

using (StreamReader streamReader = new StreamReader(tempStream))
{
// responseContent = Data from streamReader until ResponseContentMaxLength
}

return responseContent;
}

以上当然假设 ResponseContentMaxLength 的值足够小,因此分配一个足够大的 byte[] 来临时存储那么多字节是合理的。由于返回的内容规模相当,这似乎是一个合理的假设。

但是如果您不想维护额外的缓冲区,另一种方法是编写一个 Stream 类,它只从底层流对象中读取您指定的字节数,然后将其实例(使用 ResponseContentMaxLength 值初始化)传递给 StreamReader 对象。与上述相比,这是相当多的额外工作。 (不过,我想因为这是一个非常有用的对象,可能已经有一个公开可用的实现......我知道我自己至少写过几次类似的东西,我只是碰巧手边没有代码那一刻)。

关于c# - 使用 StreamReader 读取 HttpContent 流直到字符限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015479/

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