zoukankan      html  css  js  c++  java
  • 流的压缩与解压缩

    uses Zlib; 
    //压缩 
    procedure DoCompress(var CompressedStream: TMemoryStream); 
    var 
      SourceStream: TCompressionStream; 
      DestStream: TMemoryStream; 
      Count: int64; 
    Begin 
      CompressedStream.Position := 0; 
      Count := CompressedStream.Size; 
      if Count=0 then     //错误 
        Exit; 
      DestStream := TMemoryStream.Create; 
      SourceStream:=TCompressionStream.Create(clMax, DestStream); 
      Try 
        CompressedStream.SaveToStream(SourceStream); 
        SourceStream.Free; 
        CompressedStream.Clear; 
        CompressedStream.WriteBuffer(Count, SizeOf(Count)); 
        CompressedStream.CopyFrom(DestStream, 0); 
      finally 
        DestStream.Free; 
      end; 
      CompressedStream.Position := 0; 
    end; 

    //解压缩 
    procedure DoUncompress(var UnCompressedStream: TMemoryStream); 
    var 
      Count: int64; 
      SourceStream: TDecompressionStream; 
      Buffer: pchar; 
    begin 
      UnCompressedStream.Position:=0; 
      UnCompressedStream.ReadBuffer(Count, sizeof(Count)); 
      if count<0 then 
      begin 
        UnCompressedStream.Position:=0; 
        exit; 
      end; 
      SourceStream := TDecompressionStream.Create(UnCompressedStream); 
      Getmem(Buffer, Count); 
      SourceStream.Read(Buffer^, Count); 
      freeandnil(SourceStream); 
      UnCompressedStream.Clear; 
      UnCompressedStream.WriteBuffer(Buffer^,Count); 
      UnCompressedStream.Position:=0; 
      freemem(Buffer); 
    end; 

  • 相关阅读:
    Android 手势&触摸事件
    vim常用命令总结
    关于背景中的雪花
    博客园美化——看板娘
    组合数
    扩展欧几里得和求逆元
    dfs序
    RMQ问题
    NOIP2017 列队
    线段树详解
  • 原文地址:https://www.cnblogs.com/yych/p/1901408.html
Copyright © 2011-2022 走看看