标红的地方怎么理解://用流压缩文件
procedure CompressStream(var MyStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count:= MyStream.Size;
DestStream:= TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
MyStream.SaveToStream(SourceStream);
SourceStream.Free;
MYStream.Clear;
MyStream.WriteBuffer(Count, SizeOf(Count)); //这个怎么理解,
MyStream.CopyFrom(DestStream, 0);
MyStream.Position:= 0;
finally
DestStream.Free;
end;
end;
//解压
procedure UnCompressStream(var MyStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
//这个怎么理解,Count是整型的,整型的SizeOf()也就是四字节罢了
MyStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
SourceStream:= TDecompressionStream.Create(MyStream); //好像没有释放?
Try
SourceStream.ReadBuffer(Buffer^, Count);
MyStream.Clear;
MyStream.WriteBuffer(Buffer^, Count);
MyStream.Position:= 0;
finally
FreeMem(Buffer);
end;
end;
procedure CompressStream(var MyStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count:= MyStream.Size;
DestStream:= TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
MyStream.SaveToStream(SourceStream);
SourceStream.Free;
MYStream.Clear;
MyStream.WriteBuffer(Count, SizeOf(Count)); //这个怎么理解,
MyStream.CopyFrom(DestStream, 0);
MyStream.Position:= 0;
finally
DestStream.Free;
end;
end;
//解压
procedure UnCompressStream(var MyStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
//这个怎么理解,Count是整型的,整型的SizeOf()也就是四字节罢了
MyStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
SourceStream:= TDecompressionStream.Create(MyStream); //好像没有释放?
Try
SourceStream.ReadBuffer(Buffer^, Count);
MyStream.Clear;
MyStream.WriteBuffer(Buffer^, Count);
MyStream.Position:= 0;
finally
FreeMem(Buffer);
end;
end;
MyStream.ReadBuffer(Count, SizeOf(Count)); //这句是读出数据到count,与上面反之
MyStream.ReadBuffer(Count, SizeOf(Count)); //取出MyStream当前位置的4个字节数据,并放入Count中
procedure CompressStream(var MyStream: TMemoryStream);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count:= MyStream.Size;
DestStream:= TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
MyStream.SaveToStream(SourceStream);
SourceStream.Free;
MYStream.Clear;
MyStream.WriteBuffer(Count, SizeOf(Count)); //将Count值写到MyStream的当前位置
MyStream.CopyFrom(DestStream, 0);
MyStream.Position:= 0;
finally
DestStream.Free;
end;
end;
//解压
procedure UnCompressStream(var MyStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
Buffer: PChar;
Count: Integer;
Begin
MyStream.ReadBuffer(Count, SizeOf(Count)); {取出MyStream当前位置的4个字节数据,并放入Count中}
GetMem(Buffer, Count);
SourceStream:= TDecompressionStream.Create(MyStream); //在下面Free下就O了
Try
SourceStream.ReadBuffer(Buffer^, Count);
MyStream.Clear;
MyStream.WriteBuffer(Buffer^, Count);
MyStream.Position:= 0;
SourceStream.Free
finally
FreeMem(Buffer);
end;
end;