使用C#分块读取大文件

10

我想要逐块读取非常大(约4GB)的文件。

我目前正在尝试使用StreamReaderRead()读取方法。语法如下:

sr.Read(char[] buffer, int index, int count)

因为 index 是一个 int 类型,所以在我的情况下会发生溢出。我应该使用什么替代方案?

2个回答

7

索引是缓冲区的起始索引,不是文件指针的索引,通常为零。在每个Read方法调用中,您将读取与计数参数相等的字符。您不会一次性读取整个文件,而是分块读取并使用该块。

要开始写入的缓冲区中的索引,请参考此处

char[] c = null;
while (sr.Peek() >= 0) 
{
    c = new char[1024];
    sr.Read(c, 0, c.Length);
    //The output will look odd, because 
    //only five characters are read at a time.
    Console.WriteLine(c);
}

以上示例将准备1024字节并写入控制台。您可以使用这些字节,例如通过TCP连接将这些字节发送到其他应用程序。

在使用Read方法时,更有效的方法是使用与流的内部缓冲区相同大小的缓冲区,其中内部缓冲区设置为所需的块大小,并始终读取小于块大小的字节数。如果在构造流时未指定内部缓冲区的大小,则其默认大小为4千字节(4096字节),MSDN


2
这个。无论如何,您都不能在字节数组中拥有全部4 GB - CodeCaster

0

逐字节读取将比分块读取慢得多。 - KWallace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接