我想通过chunk读取非常大的文件(4GBish)块。
我目前正在尝试使用StreamReader
和Read()
读取方法。语法是:
sr.Read(char[] buffer, int index, int count)
因为索引是int
,所以在我的情况下它会溢出。我该怎么用?
答案 0 :(得分:7)
索引是缓冲区的起始索引而不是文件指针的索引,通常它将为零。在每次读取调用时,您将读取等于Read
方法的计数参数的字符。 您不会立即读取所有文件而是以块的形式阅读并使用该块。
开始编写的缓冲区索引reference。
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。
答案 1 :(得分:0)
您可以尝试更简单的Read版本,它不会对流进行分块,而是逐个字符地读取它。你必须实现自己的分块,但它会给你更多的控制权,允许你使用Long。
http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.110).aspx