把Memo1中的内容压缩后,在memo2中显示出来压缩的结果,为什么是空的?
主要就是得到的结果流的size为什么一直是0???
procedure TForm1.Button1Click(Sender: TObject);
var
  des_cStream:TMemoryStream;
  cStream:TCompressionStream;
  sourStream:TMemoryStream;
begin
  des_cStream:=TMemoryStream.Create;
  cStream:=TCompressionStream.Create(clMax,des_cStream);
  sourStream:=TMemoryStream.Create;
  Memo1.Lines.SaveToStream(sourStream);
  sourStream.SaveToStream(cStream);
  Memo2.Lines.LoadFromStream(des_cStream);
end;

解决方案 »

  1.   

    memo使用的是字符串,字符串就是以NULL(#0)为结束符,而压缩数据是二进制,并不排除首字节就是#0,或者不可打印字符。
      

  2.   

    uses
      zlib;//压缩测试
    procedure TForm2.Button1Click(Sender: TObject);
    var
        des_cStream:TMemoryStream;
        cStream:TCompressionStream;
        sourStream:TMemoryStream;
    begin
        des_cStream:=TMemoryStream.Create;
        cStream:=TCompressionStream.Create(clMax,des_cStream);
        sourStream:=TMemoryStream.Create;
        Memo1.Lines.SaveToStream(sourStream);
        sourStream.SaveToStream(cStream);
        cStream.Free;
        sourStream.Free;
        Memo2.Lines.LoadFromStream(des_cStream);
        des_cStream.SaveToFile('c:\aa.bin');
        des_cStream.Free;
    end;//解压缩测试
    procedure TForm2.Button2Click(Sender: TObject);
    var
        des_cStream:TMemoryStream; 
        cStream:TDeCompressionStream;
        sourStream:TMemoryStream;
    begin
        if Not FileExists('c:\aa.bin') then
          Button1.Click;
        if Not FileExists('c:\aa.bin') then Exit;
        des_cStream:=TMemoryStream.Create;    sourStream:=TMemoryStream.Create;
        des_cStream.LoadFromFile('c:\aa.bin');
        des_cStream.Position := 0;
        cStream:=TDeCompressionStream.Create(des_cStream);
        sourStream.Size := des_cStream.Size;
        cStream.Read(sourStream.Memory^,des_cStream.Size);
        cStream.Free;
        des_cStream.Free;
        sourStream.Position := 0;
        Memo2.Lines.LoadFromStream(sourStream);
        sourStream.SaveToFile('c:\bb.bin');
        sourStream.Free;
    end;