private bool ReadMagic(BinaryReader reader)
{
try
{
ini:
byte b0 = reader.ReadByte();
if (b0 != 0xF9) goto ini;
b0 = reader.ReadByte();
if (b0 != 0xbe) goto ini;
b0 = reader.ReadByte();
if (b0 != 0xb4) goto ini;
b0 = reader.ReadByte();
if (b0 != 0xd9) goto ini;
return true;
}
catch (EndOfStreamException)
{
return false;
}
}
我在github上发现了这段代码,并想知道为什么有人会使用ReadMagic函数而不是通常的reader.Read()函数?还有人可以解释ReadMagic函数的工作原理吗?
using(var reader = command.ExecuteReader())
{
while(ReadMagic(reader));
}
答案 0 :(得分:4)
SqlDataReader
与BinaryReader
非常不同,您不会这样使用它。 BinaryReader
用于读取流(例如从文件读取)。它有一些方法,例如ReadByte
,用于从流中读取实际字节,而SqlDataReader
使用Read
前进到下一个返回的行(如果有的话)。
看起来ReadMagic
函数正在消耗来自流的字节,直到它获得一系列0xF9,0xBE,0xB4,0xD9 - 可能是它正好在读取的任何流中的某种标记,然后返回{ {1}}找到它。