/// <summary> /// 生成区域头部 /// <paramref name="offset">偏移位置</paramref> /// </summary> private byte[] GeneratorDataRegionHeader(out int totallenght) { Stopwatch sw = new Stopwatch(); sw.Start(); //文件头部结构:Pre DataRegion(8) + Next DataRegion(8) + Datatime(8)+tagcount(4)+ tagid sum(8) +file duration(4)+ block duration(4)+Time tick duration(4)+ { len + [tag id]}+ [data blockpoint(8)] int blockcount = FileDuration * 60 / BlockDuration; int len = GetDataRegionHeaderLength() + 4 + mTagIdMemoryCach.Position + mTagCount * (blockcount * 8); totallenght = len; using (System.IO.MemoryStream mHeadMemory = new System.IO.MemoryStream()) { mHeadMemory.Position = 0; mHeadMemory.Write(BitConverter.GetBytes((long)mPreDataRegion)); //更新Pre DataRegion 指针 mHeadMemory.Write(BitConverter.GetBytes((long)0)); //更新Next DataRegion 指针 mHeadMemory.Write(MemoryHelper.GetBytes(mCurrentTime)); //写入时间 mHeadMemory.Write(BitConverter.GetBytes(mTagCount)); //写入变量个数 mHeadMemory.Write(BitConverter.GetBytes(mTagIdSum)); //写入Id 校验和 mHeadMemory.Write(BitConverter.GetBytes(FileDuration)); //写入文件持续时间 mHeadMemory.Write(BitConverter.GetBytes(BlockDuration)); //写入数据块持续时间 mHeadMemory.Write(BitConverter.GetBytes(HisEnginer.MemoryTimeTick)); //写入时间间隔 //写入变量编号列表 mHeadMemory.Write(BitConverter.GetBytes(mTagIdMemoryCach.Position)); // mHeadMemory.Write(mTagIdMemoryCach.Position);//写入压缩后的数组的长度 mHeadMemory.Write(mTagIdMemoryCach.Buffer, 0, mTagIdMemoryCach.Position); //写入压缩数据 mBlockPointOffset = mHeadMemory.Position; sw.Stop(); LoggerService.Service.Info("SeriseFileItem" + Id, "GeneratorDataRegionHeader " + sw.ElapsedMilliseconds); return(mHeadMemory.ToArray()); } }
/// <summary> /// /// </summary> /// <param name="value"></param> /// <param name="start"></param> public override DataFileSeriserbase Write(DateTime value, long start) { mStream.Position = start; mStream.Write(MemoryHelper.GetBytes(value), 0, 8); return(this); }