首先,我明白我可以使用不同的方法解決此問題。我猜這個問題的存在只是因爲以不正確的方式使用不同的方法。但我想知道我的例子中究竟發生了什麼。使用EndOfStream屬性後StreamReader.BaseStream問題
我正在使用StreamReader讀取文件。爲了從它那裏得到字節,我決定使用BaseStream.Read:
int length = (int)reader.BaseStream.Length;
byte[] file = new byte[length];
while(!reader.EndOfStream)
{
int readBytes = reader.BaseStream.Read(file, 0,
(length-offset)>bufferSize?bufferSize:(length - offset));
for (int i = 0; i<readBytes; i++)
{
...
}
offset += readBytes;
}
BaseStream.Read拒絕領取最後的1024個字節時財產StreamReader.EndOfStream在閱讀之前使用。後來我發現信息,即EndOfStream試圖讀取1個字節,但實際上他讀取了1024字節應有的性能。顯然這1kb變得不可能達到。
編輯:如果我刪除代碼reader.EndOfStream財產,reader.BaseStream.Read將正常工作。這是主要的問題。
我再次明白,這個代碼示例是絕對低效的。我只是想了解在這個例子中流是如何工作的,並且由於代碼不好而存在這個問題(或者StreamReader.BaseStream有一些問題)?提前致謝。
你爲什麼要使用的StreamReader呢? – usr
@usr就像我說過的,可以毫無困難地避免這個問題。我只是好奇使用財產的事實如何以這種奇怪的方式影響內部流。 –