最近由于项目需要涉及到解压第三方公司的数据,在此做一下记录环境部署和使用方法,免得以后忘记。
    对方公司的数据是通过TCompressionStream 压缩之后,存到数据库中,采用的delphi7.起初以为直接用TCompressionStream就能搞定,实际发现BCB 没有这个东西。需要另外部署。

上网搜索之后,发现本质是一个叫zlib的库。

我用的是 1.2.3版本,下载地址 http://www.base2ti.com/?id=delphi.zlib
关于zlib的说明  http://www.zlib.net/; ,大致喵了一下 是 霍夫曼编码 啥的,后面再一点点仔细研究。

1、编译DelphiZLib.bpr 
     1.2.3版本解压之后得到 DelphiZLib.bpr 工程, 用BCB6编译这个工程
本质上就是编译那些*.c 文件得到 *.obj 文件 和 delphizlib.lib

2、编译ZLibEx.pas
     bcb6新建一个lib 工程,将zlibEx.pas  通过project->Add 添加到工程,build即可,我边编译的时候报错了,发现是这个pas文件中
不知道为啥有 “锘縶*********************************”  这样的乱码,将乱码改成 “{******”  (老实说delphi用 {表示注释 我不能理解) 即可。
     得到 ZLibEx.hpp

3、编译ZLibExGZ.pas
     与编译ZLibEx.pas同样的方法,得到ZLibExGZ.hpp

4、添加到运行环境
     网上很多人喜欢吧 库文件一股脑的拷贝到 borland 安装目录的lib文件夹下面,这么做因为BCB工程默认会 引用 $(BCB)\include 
$(BCB)\include\VCL  (类似JAVA里面部署环境变量,总之就是要当前工程能够找到引用的lib  obj  pas  cpp 这些库文件) 
     我是单独引用或在程序中带上三方的lib(仅仅是个人喜好,不喜欢混一块)。比如 D:\zlib  下面放了编译出来的lib  obj  hpp  pas 这些文件 ,那么 optiontion->directores\contains
include path 和 lib path  引用D:\ZLIB

5、添加lib,obj
将d:\zilib  的 lib 和 obj 复制到到 当前工程下面, 比如 D:\project\zlib 文件夹里面
然后通过 project->add
吧lib 和 obj 都引用过去,否则报 无法引用xxxx之类的错误。

6、使用
在工程代码中
#include "ZLibEx.hpp"
即可使用 
//压缩流
TZCompressionStream  
//解压流
TZDecompressionStream

7、例子
这些例子是看人家delphi 自己翻译过来,又调整了下,保证能运行。前提是程序目录下有 s.bmp文件
 
//压缩的例子 
void __fastcall TForm1::btn3Click(TObject *Sender)
{
    TMemoryStream *fs = new TMemoryStream();
    fs->LoadFromFile("s.bmp");
    int fsize = 0;
    fsize = fs->Size;

TMemoryStream *ms = new TMemoryStream();
    ms->Write(&fsize,sizeof(fsize));

//构造时1参数为目标流 、2参数为压缩等级,这里选最快
    //enum TZCompressionLevel { zcNone, zcFastest, zcDefault, zcMax, zcLevel1, zcLevel2, zcLevel3, zcLevel4, zcLevel5, zcLevel6, zcLevel7, zcLevel8, zcLevel9 };
    TZCompressionStream *cs = new  TZCompressionStream(ms,zcFastest);
    //输入文件流
    fs->SaveToStream(cs);

//压缩完毕保存压缩文件
    ms->SaveToFile("test.crp");

delete fs;
    delete cs;
    delete ms;
}

//解压上面产生的 test.crp

void __fastcall TForm1::btn2Click(TObject *Sender)
{

TMemoryStream *fs = new TMemoryStream();
    fs->LoadFromFile("test.crp");
    fs->Position = 0;
    int fsize = 0;
    //此方法可以得到解压之后的大小
    fs->ReadBuffer(&fsize,sizeof(fsize));

TMemoryStream* ms = new TMemoryStream();
    ms->SetSize(fsize);

TZDecompressionStream* ds = new TZDecompressionStream(fs);
    //解压后输入到ms流
    ds->Read(ms->Memory,fsize);

ms->SaveToFile("ok.bmp");

delete ms;
    delete ds;
    delete fs;

}

BCB6 使用TZCompressionStream压缩的更多相关文章

  1. delphi 压缩ZLib

    system.ZLib http://docwiki.embarcadero.com/CodeExamples/Berlin/en/ZLibCompressDecompress_(Delphi) 还不 ...

  2. ASP.NET Core 中间件之压缩、缓存

    前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...

  3. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  4. 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap

    一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...

  5. linux 如何对文件解压或打包压缩

    tar命令用与对文件打包压缩或解压,格式: tar [选项] [文件] 打包并压缩文件: tar -czvf  压缩包名 .tar.gz 解压并展开压缩包: tar -xzvf  压缩包名 .tar. ...

  6. linux压缩和解压缩命令大全

    .tar 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName ------------------------------------- ...

  7. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  8. H5图片压缩与上传

    接到需求,问前端是否可以压缩图片?因为有的图片太大,传到服务器上再压缩太慢了.意识里没有这么玩过,早上老大丢来一个知乎链接,一看,原来前辈们已经用canvas实现了(为自己的见识羞愧3秒钟,再马上开干 ...

  9. 压缩javascript文件方法

    写在前面的话:正式部署前端的时候,javascript文件一般需要压缩,并生成相应的sourcemap文件,对于一些小型的项目开发,这里提供一个简单的办法. ======正文开始====== 1.下载 ...

随机推荐

  1. git推送远程仓库以及分支介绍

    1.介绍 我们要把本地仓库的项目推送到远程服务器,首先我们得有自己的服务器,一般我们选择码云和github,码云和github的操作差不多,今天我们再次介绍码云的使用 2.码云的使用 第一步:首先我们 ...

  2. 【OpenGL学习】 四种绘制直线的算法

    我是用MFC框架进行测试的,由于本人也没有专门系统学习MFC框架,代码若有不足之处,请指出. 一,先来一个最简单的DDA算法 DDA算法全称为数值微分法,基于微分方程来绘制直线. ①推导微分方程如下: ...

  3. windows服务器入门 使用FileZilla搭建FTP服务

    下载FileZilla Server(注意:我搭建ftp的时候,有一个fz的版本会报错,百度了老半天都没有解决这个问题,回来我换了一个版本就可以.如果你们也出现了不知道怎么搞定的问题的话   可以考虑 ...

  4. U盘防病毒

    1.待查 http://jingyan.baidu.com/article/a3f121e4ced14ffc9052bbca.html

  5. IIC挂死问题解决过程

    0.环境:arm CPU 带有IIC控制器作为slave端,带有调试串口. 1.bug表现:IIC slave 在系统启动后概率挂死,导致master无法detect到slave. 猜测1:认为IIC ...

  6. 19年最新 Python0基础学习书籍推荐(内涵PDF地址以及书籍源码)

    去年看过一篇文章,是关于18年的最适合0基础学习的书籍,今年,最新的书籍也已经统计出来.书籍的PDF太过于难找,所以很多PDF都找不到. 仅仅只能找到英文版PDF 本文章统计了18.19并做过对比,在 ...

  7. 生成 n 个不同的随机数且随机数区间为 [0,n)

    生成 n 个不同的随机数且随机数区间为 [0,n) Java 实现 import java.util.ArrayList; import java.util.List; import java.uti ...

  8. Java单例设计模式和多例设计模式

    单例设计模型 教学视频链接:https://edu.aliyun.com/course/1011 1,private不可以在类外部访问,但可以在内部访问 2,此时Singleton类内部的instan ...

  9. 请问IOS中做一个手机网站的app壳复杂吗?

    公司开发了一个平台,手机网站已经做出来了,想开发一个苹果应用app,但公司没人会IOS开发,为了减小成本,现在想直接做一个壳来加载手机网站,请问在ios中复杂吗?是否有相应的控件直接加载url就行? ...

  10. vue 集成 NEditor 富文本

    下载NEditor 放在  vue 项目下面 public  文件中. 安装    vue-neditor-wrap  执行命令 npm  install  vue-neditor-wrap 代码使用 ...