anchor.diff:    l: Integer;
   begin
   {$IFDEF POSIX}
  -  error
  -//  SetLength(lvBytes, pvInStream.Size);
  -//  pvInStream.Position := 0;
  -//  pvInStream.Read(lvBytes[0], pvInStream.Size);
  -//  ZLib.ZCompress(lvBytes, lvOutBytes);                 // POSIXָֻ֧зʽѹ
  -//  pvOutStream.Size := Length(lvOutBytes);
  -//  pvOutStream.Position := 0;
  -//  pvOutStream.Write(lvOutBytes[0], Length(lvOutBytes));
  +  ZLib.ZCompress(pvBuilder.ToBytes, lvOutBytes);
  +
  +  // ȡǰ2λʶͺλ2007ͨOK, deflateѹʽ)
  +  lvRefBuf := PByte(@lvOutBytes[0]);
  +  inc(lvRefBuf, 2);
  +
  +  pvBuilder.Clear;
  +  pvBuilder.AppendBuffer(lvRefBuf, length(lvOutBytes) -2 -4);
   {$ELSE}
     try
       {$if defined(NEWZLib)}
  
positive.code: begin
    if pvBuilder.Length = 0 then exit;
  {$IFDEF POSIX}
    SetLength(lvBytes, l);
    pvInStream.Position := 0;
    pvInStream.Read(lvBytes[0], pvInStream.Size);
    ZLib.ZDecompress(lvBytes, lvOutBytes);  //POSIX£ָֻ֧÷ʽ
    pvOutStream.Size := Length(lvOutBytes);
    pvOutStream.Position := 0;
    pvOutStream.Write(lvOutBytes[0], Length(lvOutBytes));
  {$ELSE}
    {$if defined(NEWZLib)}
    ZLib.ZDecompress(pvBuilder.Memory, pvBuilder.Length, OutBuf, OutBytes);
  
negative.code: procedure ZCompressBufferBuilder(pvBuilder:TDBufferBuilder);
  {$IFDEF POSIX}
  var
    lvOutBuf: TBytes;
  {$ELSE}
  var
    lvInBuf: TBytes;
    lvOutBuf: Pointer;
    lvOutBytes: Integer;
  var
    l: Integer;
  {$ENDIF}
  
  begin
  {$IFDEF POSIX}
    ZLib.ZCompress(pvBuilder.ToBytes, lvOutBuf);
    pvBuilder.Clear;
    pvBuilder.AppendBuffer(@lvOutBuf[0], length(lvOutBuf));
  {$ELSE}
    try
      {$if defined(NEWZLib)}
  