gpt4 book ai didi

c# - 需要帮助理解 Stream.Read()

转载 作者:行者123 更新时间:2023-11-30 18:57:47 25 4
gpt4 key购买 nike

对于逐渐将文件读入缓冲区的步骤,我有点困惑。

来自 MSDN 文档

public abstract int Read(
byte[] buffer,
int offset,
int count
)

来源自C# Examples

FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
try
{
int length = (int)fileStream.Length; // get file length
buffer = new byte[length]; // create buffer
int count; // actual number of bytes read
int sum = 0; // total number of bytes read

// read until Read method returns 0 (end of the stream has been reached)
while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
sum += count; // sum is a buffer offset for next reading

我可以说 fileStream.Read(buffer, sum, length - sum) 行读作“Read fileStreamsum(偏移量)到 length - sum(要读取的总字节数)到 buffer”。好的,所以在开始时,当 sum = 0 时,我会有效地将整个 fileStream 读入 1 short 缓冲区,但我认为情况并非如此。也许 Read() 将它可能读取的所有内容读入缓冲区?然后返回以便您可以再次Read() 吗?我有点困惑。

最佳答案

Read 将读取任何可用的内容(阻塞直到 something 可用)但可能没有足够的数据准备好填充缓冲区以开始。

想象一下通过网络下载数据 - 可能有数兆字节的数据要下载,但只有其中的一部分可以开始使用。因此,您需要不断调用 Read(),直到您阅读了尽可能多的内容。

Stream.Read 将读取最多 您请求的字节数,但也可以轻松读取更少。诚然,对于本地文件流,我怀疑除非文件更短,否则它总是读取你所要求的那么多,但对于一般的流来说情况并非如此,而且我不相信它保证即使是本地文件流。

关于c# - 需要帮助理解 Stream.Read(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966389/

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