请问怎么将MemoryStream里的zip格式的数据解压到memoryStream里

解决方案 »

  1.   

    uses 
    ZLib;{ Compress a stream }procedure CompressStream(inpStream, outStream: TStream);varInpBuf, OutBuf: Pointer;InpBytes, OutBytes: Integer;beginInpBuf := nil;OutBuf := nil;tryGetMem(InpBuf, inpStream.Size);inpStream.Position := 0;InpBytes := inpStream.Read(InpBuf^, inpStream.Size);CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);outStream.Write(OutBuf^, OutBytes);finallyif InpBuf <> nil then FreeMem(InpBuf);if OutBuf <> nil then FreeMem(OutBuf);end;end; { Decompress a stream }procedure DecompressStream(inpStream, outStream: TStream);varInpBuf, OutBuf: Pointer;OutBytes, sz: Integer;beginInpBuf := nil;OutBuf := nil;sz := inpStream.Size - inpStream.Position;if sz > 0 thentryGetMem(InpBuf, sz);inpStream.Read(InpBuf^, sz);DecompressBuf(InpBuf, sz, 0, OutBuf, OutBytes);outStream.Write(OutBuf^, OutBytes);finallyif InpBuf <> nil then FreeMem(InpBuf);if OutBuf <> nil then FreeMem(OutBuf);end;outStream.Position := 0;end;
      

  2.   

    procedure Compress(var CompressedStream: TMemoryStream);varSourceStream: TCompressionStream;DestStream: TMemoryStream;Count: Integer;BeginCount := CompressedStream.Size;DestStream := TMemoryStream.Create;SourceStream:=TCompressionStream.Create(clMax, DestStream);TryCompressedStream.SaveToStream(SourceStream);SourceStream.Free;CompressedStream.Clear;CompressedStream.WriteBuffer(Count, SizeOf(Count));CompressedStream.CopyFrom(DestStream, 0);finallyDestStream.Free;end;end;procedure UnCompress(const CompressedStream: TMemoryStream);varSourceStream: TDecompressionStream;DestStream: TMemoryStream;Buffer: PChar;Count: integer;BeginCompressedStream.Seek(0,soFromBeginning);CompressedStream.ReadBuffer(Count, SizeOf(Count));GetMem(Buffer, Count);DestStream := TMemoryStream.Create;SourceStream := TDecompressionStream.Create(CompressedStream);TrySourceStream.ReadBuffer(Buffer^, Count);DestStream.WriteBuffer(Buffer^, Count);DestStream.Position := 0;//复位流指针CompressedStream.LoadFromStream(DestStream);finallyFreeMem(Buffer);DestStream.Free;end;end;
      

  3.   

    zlib可以解压zip格式,因为zlib的算法和zip的是一样的。只不过用zlib来解压zip格式的话要自己处理zip格式中的控制信息(比如:zip头,文件名列表,每个文件长度等等,有用的信息一般都在尾部)
      

  4.   

    Idle_(阿呆)
    能有详细说明嘛?