gpt4 book ai didi

c# - StreamReader Read 方法不读取指定的字符数

转载 作者:行者123 更新时间:2023-11-30 13:48:50 25 4
gpt4 key购买 nike

我必须解析一个大文件,而不是这样做:

 string unparsedFile = myStreamReader.ReadToEnd(); // takes 4 seconds
parse(unparsedFile); // takes another 4 seconds

我想利用前 4 秒,尝试同时做两件事,方法如下:

        while (true)
{
char[] buffer = new char[1024];

var charsRead = sr.Read(buffer, 0, buffer.Length);

if (charsRead < 1)
break;

if (charsRead != 1024)
{
Console.Write("Here"); // debuger stops here several times why?
}

addChunkToQueue(buffer);
}

这里是调试器的图像:(我添加了 int counter 来显示我们读取的迭代小于 1024 字节)

enter image description here

请注意,那里读取了 643 个字符,而不是 1024 个字符。在下一次迭代中,我得到:

enter image description here

我认为我应该一直读取 1024 字节,直到到达最后一次迭代,其中 remeining 字节小于 1024。

所以我的问题是为什么我会在迭代抛出 while 循环时读取“随机”数量的字符?


编辑

我不知道我正在处理的是哪种流。我执行一个过程,如:

        ProcessStartInfo psi = new ProcessStartInfo("someExe.exe")
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
};

// execute command and return ouput of command
using (var proc = new Process())
{
proc.StartInfo = psi;
proc.Start();

var output = proc.StandardOutput; // <------------- this is where I get the strem

//if (string.IsNullOrEmpty(output))
//output = proc.StandardError.ReadToEnd();

return output;
}
}

最佳答案

一方面,您读取的是字符,而不是字节。差别很大。

至于为什么它不一定一次读取所有内容:可能没有那么多可用数据,并且 StreamReader 已决定为您提供它所获得的内容,而不是为不确定的情况而阻塞填充缓冲区的时间。这样做完全在其权利范围内。

这是来自本地文件还是来自网络?通常本地文件操作比网络下载更有可能填充缓冲区,但无论哪种方式,您都不应该依赖于缓冲区被填充。如果它是一个"file"(即使用 FileStream 读取)但它恰好位于网络共享上......好吧,据我所知这是一个灰色区域:)它是一个流 - 对待它方式。

关于c# - StreamReader Read 方法不读取指定的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299522/

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