SqlDataReader while(reader.Read())

时间:2016-07-01 16:13:31

标签: c#

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));
}

1 个答案:

答案 0 :(得分:4)

SqlDataReaderBinaryReader非常不同,您不会这样使用它。 BinaryReader用于读取流(例如从文件读取)。它有一些方法,例如ReadByte,用于从流中读取实际字节,而SqlDataReader使用Read前进到下一个返回的行(如果有的话)。

看起来ReadMagic函数正在消耗来自流的字节,直到它获得一系列0xF9,0xBE,0xB4,0xD9 - 可能是它正好在读取的任何流中的某种标记,然后返回{ {1}}找到它。