private void DoCore()
        {
            DateTime start = DateTime.Now;

            m_Reader.BaseStream.Position = this.Definition.HeaderDefinition.BytesCount;

            List<FlightDataContentFrame> frames = new List<FlightDataContentFrame>();

            while (m_Reader.BaseStream.Length > m_Reader.BaseStream.Position + 1)
            {
                FlightDataReading.AircraftModel1.FlightDataContentFrame frame = new FlightDataContentFrame();
                long current = m_Reader.BaseStream.Position;

                List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>();
                foreach (var seg in this.Definition.FrameDefinition.Segments)
                {
                    FlightDataContentSegment content = new FlightDataContentSegment()
                    {
                        DataTypeStr = seg.DataTypeStr,
                        SegmentName = seg.SegmentName
                    };

                    if (seg.DataTypeStr == DataTypeConverter.FLOAT)
                    {
                        float floatVal = m_Reader.ReadSingle();
                        content.Value = floatVal;// floatVal.ToString();
                    }
                    else if (seg.DataTypeStr == DataTypeConverter.INT32)
                    {
                        int intVal = m_Reader.ReadInt32();
                        content.Value = intVal;// intVal.ToString();
                    }
                    else if (seg.DataTypeStr == DataTypeConverter.LONG)
                    {
                        long longVal = m_Reader.ReadInt64();
                        content.Value = longVal;// longVal.ToString();
                    }
                    else if (seg.DataTypeStr == DataTypeConverter.DATETIME)
                    {
                        content.Value = 0;// string.Empty;
                    }
                    else
                    {
                        byte[] strs = m_Reader.ReadBytes(seg.BytesCount);
                        content.Value = 0;// new string(System.Text.Encoding.GetEncoding("ASCII").GetChars(strs));
                    }
                    segments.Add(content);
                }

                var filtered = segments.Where(
                     new Func<FlightDataContentSegment, bool>(
                         delegate(FlightDataContentSegment seg1)
                         {
                             if (seg1 == null || string.IsNullOrEmpty(seg1.SegmentName) || seg1.SegmentName == "ID")
                                 return false;
                             return true;
                         }));

                frame.Segments = filtered.ToArray();//segments.ToArray();
                frames.Add(frame);

                if (this.m_Reader.BaseStream.Position != current + this.Definition.FrameDefinition.BytesCount)
                {
                    if (this.m_Reader.BaseStream.Position + 1 >= this.m_Reader.BaseStream.Length)
                        break;
                    this.m_Reader.BaseStream.Position = current + this.Definition.FrameDefinition.BytesCount;
                }
            }

            this.Frames = frames;

            return;

            //PHYHeader header = PHYHelper.ReadPHYHeader(m_Reader);
            //int secondCount = PHYHelper.GetFlyParamSeconds(header);

            //Task task1 = this.DoAddFlightRecordAsync(header);

            //string aircraftModel = header.AircrfName;

            ////获取需要读取的飞参列表
            //List<FlyParameter> needReadParams = FlyParameter.Parameters.Values.ToList();

            //Dictionary<string, FlyParameter> paramMap = new Dictionary<string, FlyParameter>();
            //foreach (FlyParameter fp in needReadParams)
            //    paramMap.Add(fp.ID, fp);

            //this.InitLevel2Entities(paramMap, secondCount);

            //for (int i = 1; i <= secondCount; i++)
            //{
            //    //读取当前秒的飞参值
            //    foreach (FlyParameter fp in needReadParams)
            //    {
            //        float[] values = PHYHelper.ReadFlyParameter(m_Reader, i, header, fp);
            //        FlightDataEntities.FlightRawData dt
            //            = new FlightDataEntities.FlightRawData() { ParameterID = fp.ID, Second = i, Values = values };
            //        this.PutRawDataToMongoDB(dt);

            //        FlightRecordEntity entity = new FlightRecordEntity() { FlightSecond = i, ParameterID = fp.ID, Values = values };
            //        this.PutEntityToLevel2Mentities(entity, secondCount);
            //    }
            //}

            //Task task2 =
            //    Task.Run(new Action(delegate()
            //{
            //    this.FlushDataToMongoDB(secondCount);
            //}));
            ////一边入库一边处理Fault判定

            //if (task1 != null)
            //    task1.Wait();
            //if (task2 != null)
            //    task2.Wait();
        }
        public ParameterRawData[] GetDataBySecond(int second)
        {
            if (this.m_Reader == null || this.m_Reader.BaseStream.CanRead == false)
            {
                throw new IOException("无法读取数据源文件。");
            }

            if (this.Definition == null)
                return null;

            int startPos = this.Definition.HeaderDefinition.BytesCount +
                (second * this.Definition.FrameDefinition.BytesCount);

            if (this.m_Reader.BaseStream.Position != startPos)
                this.m_Reader.BaseStream.Position = startPos;

            BitArray bitArray = new BitArray(this.m_Reader.ReadBytes(1024));

            if (this.m_Reader.BaseStream.Position != startPos)
                this.m_Reader.BaseStream.Position = startPos;//复位

            FlightDataReading.AircraftModel1.FlightDataContentFrame frame = new FlightDataContentFrame();
            long current = m_Reader.BaseStream.Position;

            List<FlightDataContentSegment> segments = new List<FlightDataContentSegment>();
            foreach (var seg in this.Definition.FrameDefinition.Segments)
            {
                if (seg == null)
                    continue;

                if ((string.IsNullOrEmpty(seg.SegmentName) ||
                    seg.SegmentName.Equals("(NULL)") || seg.SegmentName.Equals("ID"))
                    && (seg.BitsDefinition == null || seg.BitsDefinition.Length == 0))
                {
                    m_Reader.BaseStream.Position += seg.BytesCount;
                    continue;
                }

                var testInt = m_Reader.ReadInt32();
                m_Reader.BaseStream.Position -= 4;

                if (seg.BitsDefinition != null && seg.BitsDefinition.Length > 0)
                {
                    this.ReadComplexSegment(segments, seg, bitArray);
                }
                else
                {
                    ReadSimpleSegment(segments, seg, bitArray);
                }
            }
            var result = from se in segments
                         group se by se.SegmentName into gse
                         select gse;

            var result2 = from g in result
                          select new ParameterRawData()
                          {
                              ParameterID = g.Key,
                              Second = second,
                              Values =
                                  (from one in g
                                   select Convert.ToSingle(one.Value)).ToArray()
                          };
            return result2.ToArray();
        }