读走数据自动往前移,写入数据自动写在上次写入的后面。

解决方案 »

  1.   

    type
      TMyMemory=class
      private
        FBuff:array[0..8191]of byte;
        FSeek:integer;
        FCount:integer;
        procedure   Add(const buf;Len:integer);
        procedure   Read(var buf;Len:integer);
      public
        constructor Create;
      end;constructor TMyMemory.Create;
    begin
        FCount:=0; FSeek:=0;
    end;procedure   TMyMemory.Add(const buf;Len:integer);
    begin
        move(buf, FBuff[FCount] ,Len);
        inc(FCount);
    end;procedure   TMyMemory.Read(var buf;Len:integer);
    begin
        move(FBuff[FSeek],buf,Len);
        inc(FSeek);
        if FSeek=FCount then
        begin
            FCount:=0; FSeek:=0;
        end;
    end;
      

  2.   

    type
      TMyMemory=class
      private
      FBuff:array[0..8191]of byte;
      FSeek:integer;
      FCount:integer;
      public
      procedure Add(const buf;Len:integer);//上面的例子放错地方了
      procedure Read(var buf;Len:integer);
      constructor Create;
      end;
      

  3.   

    2楼你的 TMyMemory.Read(var buf;Len:integer);
    好像没有往前移
      

  4.   

    if FSeek=FCount then
      begin
      FCount:=0; FSeek:=0;
      end;这个取完数据就会自动往前移了修改一下更完好一些function TMyMemory.Read(var buf;Len:integer):boolean;
    begin
      Result:=(FSeek+Len)>=FCount;
      if Result=false then //数据不足要读取的,先退出
         exit;
      move(FBuff[FSeek],buf,Len);
      inc(FSeek);
      if FSeek=FCount then
      begin
      FCount:=0; FSeek:=0;
      end;
    end;