gpt4 book ai didi

c# - 如何读取 Stream 并将其位置重置为零,即使 stream.CanSeek == false

转载 作者:太空狗 更新时间:2023-10-29 19:58:43 26 4
gpt4 key购买 nike

即使 stream.CanSeek == false,我如何读取 Stream 并将其位置重置为零?我需要一些解决方法。

最佳答案

如果您的场景允许您替换原始流,那么您可以检查它是否支持搜索,如果不支持,读取其内容并将它们包装到一个新的 MemoryStream 中,然后您可以使用它用于后续操作。

static string PeekStream(ref Stream stream)
{
string content;
var reader = new StreamReader(stream);
content = reader.ReadToEnd();

if (stream.CanSeek)
{
stream.Seek(0, SeekOrigin.Begin);
}
else
{
stream.Dispose();
stream = new MemoryStream(Encoding.UTF8.GetBytes(content));
}

return content;
}

上面的代码效率很低,因为它必须为内容大小的两倍分配内存。我的建议是调整您访问流的代码部分(在阅读其所有内容之后),以便让它们访问您的内容的存储副本。例如:

string content;
using (var reader = new StreamReader(stream))
content = reader.ReadToEnd();

// Process content here.

string line;
using (var reader = new StringReader(content))
while ((line = reader.ReadLine()) != null)
Console.WriteLine(line);

由于 StringReader 只是从您的 content 字符串中读取,您不会浪费内存来创建数据的冗余副本。

关于c# - 如何读取 Stream 并将其位置重置为零,即使 stream.CanSeek == false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8961308/

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