【问题标题】:Reading large file in chunks c#分块读取大文件c#
【发布时间】:2014-02-12 11:10:55
【问题描述】:

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

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

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

因为 indexint,在我的情况下它会溢出。我应该改用什么?

【问题讨论】:

    标签: c# streamreader


    【解决方案1】:

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

    开始写入的缓冲区索引,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

    【讨论】:

    【解决方案2】:

    您可以尝试更简单的 Read 版本,它不会对流进行分块,而是逐个字符地读取它。你必须自己实现分块,但它会给你更多的控制权,让你可以使用 Long 来代替。

    http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多