Zlib压缩算法在java与delphi之间的交互实现

一个典型应用中,使用delphi作为客户端,J2EE服务端,两者之间用XML作为数据交换,为了提高效率,对XML数据进行压缩,为此需要找到一种压缩/解压算法能够两个平台之间交互处理,使用ZLIB算法就是一个不错的解决方案。
1、JAVA实现
在JDK中,在java.util.zip包中已经内置了ZLIB的实现,示例代码如下:
 1 // 解压
 2      public  String decompressData(String encdata)  {
 3        try {
 4            ByteArrayOutputStream bos = new ByteArrayOutputStream();
 5            InflaterOutputStream zos = new InflaterOutputStream(bos);
 6            zos.write(convertFromBase64(encdata));
 7            zos.close();
 8            return new String(bos.toByteArray());
 9        }
 catch (Exception ex) {
10            ex.printStackTrace();
11            return "UNZIP_ERR";
12        }

13    }

14
15      // 压缩
16      public  String compressData(String data)  {
17        try {
18            ByteArrayOutputStream bos = new ByteArrayOutputStream();
19            DeflaterOutputStream zos = new DeflaterOutputStream(bos);
20            zos.write(data.getBytes());
21            zos.close();
22            return new String(convertToBase64(bos.toByteArray()));
23        }
 catch (Exception ex) {
24            ex.printStackTrace();
25            return "ZIP_ERR";
26        }

27    }

2、DELPHI中的实现
在DELPHI中,有第3方的控件可以利用来实现压缩/解压,这里我们选择VCLZIP V3.04,可以从这里下载http://www.vclzip.net
为了提高通用性,我们可以编写一个标准的DLL,就可以在Win32平台随意调用了,关键代码如下:
function  Cmip_CompressStr(txt: PChar): pchar; stdcall;
var
  zip: TVclZip;
  compr: 
string ;
  data: PChar;
begin
  zip :
=  TVclZip.Create(nil);
  compr :
=  zip.ZLibCompressString(txt);
  data :
=  pchar(Base64EncodeStr(compr));
  Result :
=  StrNew(data);
  zip.Free
end ;

function  Cmip_DeCompressStr(txt: PChar): pchar; stdcall;
var
  zip: TVCLUnZip;
  compr: 
string ;
  data: PChar;
begin
  zip :
=  TVCLUnZip.Create(nil);
  compr :
=  zip.ZLibDecompressString(Base64DecodeStr(txt));
  data :
=  StrNew(pchar(compr));
  Result :
=  data;
  zip.Free
end ;


在我们当前的项目中,采用的方案是Powerbuilder +DLL与J2EE平台进行xml数据交换的方式。

你可能感兴趣的:(Zlib压缩算法在java与delphi之间的交互实现)