FileStream 在 c# 中的工作原理

本文关键字:工作 FileStream | 更新日期: 2023-09-27 18:30:39

我有以下一段代码。我不完全理解它的实现。img 将图像的路径存储为c:''desktop'my.jpg

FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
         byte[] bimage = new byte[fs.Length];
         fs.Read(bimage, 0, Convert.ToInt32(fs.Length));

在第一行中,filestream打开位于路径 img 处的图像进行读取。第二行是(我猜)将打开的文件转换为字节。

fs.length 代表什么?
图像有长度还是文件名的长度(我猜不是)?
第三条线在做什么?

请帮我澄清!!

FileStream 在 c# 中的工作原理

fs 是许多 C# I/O 对象之一,它提供了文件描述符和示例中的一些方法(如 Read)。由于 Read 方法返回字节数组,因此应首先声明它并将其长度设置为文件长度(第二个字符串,因此 fs。长度是以字节为单位的文件长度)。然后,您所需要的只是读取文件内容并将其存储在此数组(第三行)中。这可以通过一次迭代(如示例中所示)或通过循环读取块来完成。完成读取后,销毁 fs 对象以防止内存泄漏是一种好方法。

首先,您需要记住缓冲区是什么。在计算中,缓冲区是一个内存区域,用于在数据从一个地方传输到另一个地方时临时存储数据。此过程可以补偿数据流的生产者和消费者之间的速度或操作模式的差异。

"流"是您打开、从中读取块然后关闭的缓冲区。对于文件,操作系统查找文件、管理指针并锁定资源。您将一个块(一个字节范围)读入内存。此块的大小可能会有所不同,但物理内存限制会限制它。

例如,在像Raspberry Pi B(512MB)这样的低内存系统上,大文件可能会导致错误。Microsoft的fs.Length计算文件中的所有字节,对于较小的文件,工作速度更快,对于较大的文件,工作速度较慢。这允许计算最佳块大小与最大大小。

但是,缓冲区大小不应完全由文件大小决定;还必须考虑最大计算机内存和并发内存使用进程。请记住,始终关闭或释放锁定的 I/O 资源。这是开发人员,甚至是老年人经常犯的错误,而且不好。例如,在具有 512MB RAM + 2GB SD 的 Raspberry Pi 上读取 10GB 支付交易日志文件可能会出现问题。