delphi中解压缩流的应用

最近在写TCP程序,要用到压缩传输,因此写了两个函数。用到了zlib库
{------------------------------------------------------------------------------}
{压缩流}
function  CommpressStream(Source :TFileStream):TMemoryStream;
var
  dest,SMemory,rtn :TMemoryStream;
  PressStream:TCompressionStream;
  count :Int64;
begin
  dest := TMemoryStream.Create;
  SMemory :=TMemoryStream.Create;
  rtn := TMemoryStream.Create;
  PressStream := TCompressionStream.Create(clMax,dest);
  try
    Source.Position := 0;
    Count := Source.Size;
    SMemory.CopyFrom(Source,Count);

    SMemory.SaveToStream(PressStream);
    PressStream.Free;

    rtn.WriteBuffer(Count, Sizeof(Count));
    rtn.CopyFrom(dest,0);
    rtn.Position := 0;
  finally
    SMemory.Free;
    dest.Free;
  end;
  Result  := rtn;
end;
{------------------------------------------------------------------------------}
{解压缩流}
procedure  DECommpressStream(Source :TMemoryStream; destfile :string);
var
  count :Int64;
  SourceStream:TDecompressionStream;
  DFstream :TFileStream;
  buffer :Pointer;
begin
  Source.Position := 0;
  Source.ReadBuffer(Count, Sizeof(Count));
  SourceStream := TDecompressionStream.Create(Source);
  GetMem(buffer,count);
  try
    DFstream := TFileStream.Create(destfile,fmCreate);
    SourceStream.ReadBuffer(Buffer^,Count);
    DFstream.WriteBuffer(Buffer^,Count);
  finally
    FreeMem(Buffer);
    SourceStream.Free;
    FreeAndNil(DFstream);
  end;
end;

例子:
var
  dfile :TFileStream;
  fs :TMemoryStream;
begin
        dfile := TFileStream.Create(GetPath(edt_up.Text),FmopenRead);
        fs := TMemoryStream.Create;
        fs := CommpressStream(dfile);
        fsize := fs.Size;
        FreeAndNil(dfile);
.............................
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值