标红的地方怎么理解://用流压缩文件  
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;

解决方案 »

  1.   

    MyStream.WriteBuffer(Count, SizeOf(Count)); //这句话是将count写入流,长度4字节,执行完后,你查看MyStream.size就知道了
    MyStream.ReadBuffer(Count, SizeOf(Count));  //这句是读出数据到count,与上面反之
      

  2.   

    MyStream.WriteBuffer(Count, SizeOf(Count)); //将Count值写到MyStream的当前位置
    MyStream.ReadBuffer(Count, SizeOf(Count)); //取出MyStream当前位置的4个字节数据,并放入Count中
      

  3.   

    TCompressionStream和TDecompressionStream,是不是不用释放呀?
      

  4.   


    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;