我想按塊讀取非常大的文件(4GBish)塊。以大塊的形式讀取大文件c#
我正在嘗試使用StreamReader
和Read()
讀取方法。語法是:
sr.Read(char[] buffer, int index, int count)
因爲指數是int
它將溢出在我的情況。我應該用什麼來代替?
我想按塊讀取非常大的文件(4GBish)塊。以大塊的形式讀取大文件c#
我正在嘗試使用StreamReader
和Read()
讀取方法。語法是:
sr.Read(char[] buffer, int index, int count)
因爲指數是int
它將溢出在我的情況。我應該用什麼來代替?
該指數是緩衝器的起始索引不是文件指針的索引,通常這將是零。在每次讀取呼叫時,您都將閱讀等於計數參數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。
您可以嘗試更簡單的Read版本,它不會將數據流組塊化,而是逐個字符地讀取它。你必須實現自我分塊,但它會給你更多的控制權限,允許你使用Long來代替。
http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.110).aspx
這個。你[無論如何不能有一個字節數組中的所有4 GB](http://stackoverflow.com/questions/2338778/what-is-the-maximum-length-of-an-array-in-net-on- 64位視窗)。 – CodeCaster
他會閱讀大塊並使用它們。 – Adil