您的位置:首页 > 编程语言 > Delphi

在Java与Delphi间交互实现Zlib压缩算法

2013-03-15 15:16 357 查看
一个典型利用中,利用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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: