【发布时间】:2016-02-27 10:01:20
【问题描述】:
首先我明白我可以使用不同的方式解决这个问题。我猜这个问题的存在只是因为以不正确的方式使用了不同的方法。但我想知道我的例子中到底发生了什么。
我使用 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;
}
在读取之前使用属性 StreamReader.EndOfStream 时,BaseStream.Read 拒绝获取最后 1024 个字节。后来我发现信息,EndOfStream 试图读取 1 个字节,但实际上他读取了 1024 个字节,因为性能。显然这 1kb 是不可能达到的。
编辑:如果我删除代码中的 reader.EndOfStream 属性,reader.BaseStream.Read 将正常工作。这是主要问题。
我再次理解,这个代码示例绝对是低效的。我只是想了解流在该示例中是如何工作的,并且是否仅因为错误代码而存在此问题(或 StreamReader.BaseStream 有一些问题)?提前致谢。
【问题讨论】:
-
你为什么要使用 StreamReader?
-
@usr 就像我说的,完全可以毫无困难地避免这个问题。我只是好奇使用属性的事实如何以这种奇怪的方式影响内部流。
标签: c# stream filestream streamreader