zlib.pas 怎么用(50分)

  • 主题发起人 主题发起人 nick4309
  • 开始时间 开始时间
N

nick4309

Unregistered / Unconfirmed
GUEST, unregistred user!
zlib.pas 怎么用
 
procedure CompressStream(var CompressedStream: TMemoryStream;
const CompressionLevel: TCompressionLevel); //压缩方式:clnone,clfastest,cldefault,clmax
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//获得流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
//SourceStream中保存着原始的流
//将原始流进行压缩, DestStream中保存着压缩后的流
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear;
//写入原始流的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;

procedure UnCompressStream(var CompressedStream: TMemoryStream);
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin

//从被压缩的流中读出原始流的尺寸
CompressedStream.position:=0;
CompressedStream.ReadBuffer(Count,SizeOf(Count));

//根据尺寸大小为将要读入的原始流分配内存块
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
Try
//将被压缩的流解压缩,然后存入 Buffer内存块中
SourceStream.ReadBuffer(Buffer^, Count);
//将原始流保存至 DestStream流中
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//复位流指针
CompressedStream.clear;
CompressedStream.loadfromstream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
SourceStream.Free;

end;
end;

 
后退
顶部