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;
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;
2楼你的 TMyMemory.Read(var buf;Len:integer); 好像没有往前移
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;
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;
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;
好像没有往前移
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;