我想要逐块读取非常大(约4GB)的文件。
我目前正在尝试使用StreamReader
和Read()
读取方法。语法如下:
sr.Read(char[] buffer, int index, int count)
因为 index 是一个 int
类型,所以在我的情况下会发生溢出。我应该使用什么替代方案?
我想要逐块读取非常大(约4GB)的文件。
我目前正在尝试使用StreamReader
和Read()
读取方法。语法如下:
sr.Read(char[] buffer, int index, int count)
因为 index 是一个 int
类型,所以在我的情况下会发生溢出。我应该使用什么替代方案?
索引是缓冲区的起始索引,不是文件指针的索引,通常为零。在每个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。
http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.110).aspx