从byte[]中提取特定数据。在线求助!急啊
有一个数组,长度不定。数组中内容如下格式 
 byte[]   data   =   new   byte[]   {   ......0xf2,   0x7d,   0xf2,   0x7d,1,2,3,4,5,6,7,8,9,0,......,0xeb,   0xb7,   0xeb,   0xb7,0xf2,   0x7d,   0xf2,   0x7d,32,23,43,54,......0xeb,   0xb7,   0xeb,   0xb7,0xf2,   0x7d,   0xf2,   0x7d,12,12,23,32,31,......};   
 其中data   的长度不固定,......表示不定长数据。 
 要求得到 
 夹在   0xf2,   0x7d,   0xf2,   0x7d,和0xeb,   0xb7,   0xeb,   0xb7 
 中间的所有数组 
 请大家给个思路 
 有高效源代码的俺使劲给分。 
 这个100分明显太少了,问题一旦解决,还可以另开一个加分贴。
------解决方案--------------------好久没做算法了,随手写一个。     
 List <byte[]>  list = new List <byte[]> ();   
 int flag = 0; 
 int index = 0; 
 List <byte>  section = new List <byte> ();   
 foreach ( byte b in data ) 
 { 
   if ( b == (byte) 0xf2 && (flag == 0 || flag == 2) ) 
     flag++; 
   else 
     flag = 0;   
   if ( b == (byte) 0x7d && (flag == 1 || flag == 3) ) 
     flag++; 
   else 
     flag = 0; 
   if ( flag == 4 ) 
   { 
     flag = 5; 
     continue; 
   }   
   if ( flag >  4 ) 
     section.Add( byte ); 
   if ( b == (byte) 0xeb && ( flag == 5 || flag == 7 ) 
     flag++; 
   else 
     flag = 5;   
   if ( b == (byte) 0xb7 && ( flag == 6 || flag == 8 ) 
     flag++; 
   else 
     flag = 5;   
   if ( flag == 9 ) 
   { 
     section.RemoveRange( section.Lenth - 4, 4 ); 
     list.Add( section.ToArray() ); 
   } 
 }
------解决方案--------------------提供下我的思路   
 .0xf2, 0x7d, 0xf2, 0x7d是帧头,0xeb, 0xb7, 0xeb, 0xb7是帧尾 
 先匹配帧头 从帧头开始记录 直到碰到第一个帧尾 剪除固定长度的头帧尾 就得到要的数据了;   
 严格来说 帧头→帧尾才是一个有意义的信息段 帧头→帧头、帧尾 →帧尾 、帧尾→帧头都应该是丢失了帧 应该抛弃 具体要看你们的处理机制     
 性能 主要是在匹配的算法上 算法好 速度就快  帧头帧尾是固定长度 只要能快速匹配出有意义的信息段 减去固定的帧 就能得到数据。 
 关键还是匹配的算法上 可以多实验几种算法,看哪种方法快