C#报”EndOfStreamException”的原因以及解决办法

  • Post category:C#

.Net中的EndOfStreamException是指在读取流时,已经到达流的末尾,却仍然试图从流中继续读取数据时,抛出的异常。下面是一些EndOfStreamException的原因和解决办法:

原因:

  1. 使用BinaryReader读取二进制数据时,如果读取到了流的末尾,再次读取会抛出此异常;

  2. 在使用StreamReader时,如果读取到了流的末尾,再次读取会抛出此异常;

  3. 异步读取数据时,如果异步完成时已经到达流的末尾,再次读取会抛出此异常。

解决办法:

  1. 在使用BinaryReader读取二进制数据时,可以使用PeekChar()方法预先检查流的末尾,通过该方法返回值(-1表示末尾),来判断是否到达流的末尾:

csharp
BinaryReader br = new BinaryReader(fs);
while (br.PeekChar() != -1)
{
//读取数据
}

  1. 在使用StreamReader读取数据时,可以使用EndOfStream属性,判断是否到达流的末尾:

csharp
StreamReader sr = new StreamReader(fs);
while (!sr.EndOfStream)
{
//读取数据
}

  1. 在异步读取数据时,可以判断读取的字节数是否为0,如果为0表示已经到达了流的末尾:

csharp
byte[] buffer = new byte[1024];
while (true)
{
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
//到达流的末尾
break;
}
//处理读取到的数据
}

以上是EndOfStreamException的原因和解决办法的示例,需要根据自己的实际情况选择合适的方法来解决。