posts - 33, comments - 46, trackbacks - 0, articles - 2

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

Posted on 2007-10-10 10:35 在路上... 阅读(3405) 评论(3)  编辑  收藏 所属分类: JAVA相关
一个典型应用中,使用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数据交换的方式。

Feedback

# re: Zlib压缩算法在java与delphi之间的交互实现  回复  更多评论   

2007-10-11 07:14 by 大道自然
能详细解释一下是如何交换数据的吗?服务器端是做成Servlet?web service?还是其他的方式?

谢谢!

# re: Zlib压缩算法在java与delphi之间的交互实现  回复  更多评论   

2007-10-20 16:59 by midea0978
web service不会觉得太麻烦了吗?就用Servlet或者struts action还更方便!

# re: Zlib压缩算法在java与delphi之间的交互实现  回复  更多评论   

2008-03-16 11:33 by 冬雷软件
怎么调用这些函数呢.

只有注册用户登录后才能发表评论。


网站导航: