摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:72845454
 ★★photoshop学友-史上最强播放器★★
 位置:编程开发>Deiphi>Deiphi实例教程
◎→ 本类最新
在DELPHI中用线程排序
在Delphi中使用Queued Component
作非常规程序菜单掌握delphi
执行一个外部程序并等待它的完成
在应用程序中跟踪MOUSE的坐标
五子棋源代码
显示密码的原理
◎→相关资源
C语言入门视频教程
C#编程WinForm入门视频
Asp.net入门视频教程下载
VC++编程视频教程下载
VB窗体文章
HTML入门教程
Deiphi实例教程
Deiphi窗体文章
Deiphi数据库编程
Deiphi网络编程
Deiphi图形图象文章
Deiphi系统文件
◎→ 热门资源
为什么创建VCL for .NET? -- De
为什么创建VCL for .NET? -- De
搜索字符串在流中的位置
使用ACTIVEX和DELPHI开发串口通讯
设置ListView的页眉图标
圣诞节蜂蜜 (陈经韬2001年DELPHI
实现QQ窗体的缩入伸出功能

流的压缩和解压


日期:2008-10-20 22:09:33    来源:
   
 ·流的解压及压缩(代码精简高效)

流的压缩和解压
  (*//
标题:流的压缩和解压
说明:适用文件压缩、图象压缩等;调用ZLib单元的方法实现
设计:Zswang
支持:wjhu111@21cn.com
日期:2004-03-24
//*)

(*//============================================================================
设计思路:
创建TCompressionStream、TDecompressionStream实例进行压缩和解压
============================================================================//*)

uses ZLib;

const cBufferSize = $4096;

function StreamCompression(mInputStream: TStream; mOutputStream: TStream): Integer;
var
I: Integer;
vBuffer: array[0..cBufferSize]of Char;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TCompressionStream.Create(clMax, mOutputStream) do try
for I := 1 to mInputStream.Size div cBufferSize do begin
mInputStream.Read(vBuffer, cBufferSize);
Write(vBuffer, cBufferSize);
end;
I := mInputStream.Size mod cBufferSize;
if I > 0 then begin
mInputStream.Read(vBuffer, I);
Write(vBuffer, I);
end;
finally
Free;
end;
end; { StreamCompression }

function StreamDecompression(mInputStream: TStream; mOutputStream: TStream): Integer;
var
vBuffer: array[0..cBufferSize]of Char;
I: Integer;
begin
Result := -1;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
with TDecompressionStream.Create(mInputStream) do try
repeat
I := Read(vBuffer, cBufferSize);
mOutputStream.Write(vBuffer, I);
until I = 0;
Result := mOutputStream.Size;
finally
Free;
end;
end; { StreamDecompression }

//Example
procedure TForm1.Button1Click(Sender: TObject);
var
vInputStream: TFileStream;
vOutputStream: TFileStream;
begin
vInputStream := TFileStream.Create('c:\temp\temp.exe', fmOpenRead);
vOutputStream := TFileStream.Create('c:\temp\temp.exe.z', fmCreate);
try
StreamCompression(vInputStream, vOutputStream);
finally
vInputStream.Free;
vOutputStream.Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
vInputStream: TFileStream;
vOutputStream: TFileStream;
begin
vInputStream := TFileStream.Create('c:\temp\temp.exe.z', fmOpenRead);
vOutputStream := TFileStream.Create('c:\temp\temp~.exe', fmCreate);
try
StreamDecompression(vInputStream, vOutputStream);
finally
vInputStream.Free;
vOutputStream.Free;
end;
end;

 [1]

Delphi数据压缩处理(2)

--->北斗程序压缩 V3.5 破解版
--->压缩加密安装宝 2006 V2.0
--->中华压缩(ChinaZip) V10.8
--->中华压缩(ChinaZip) V10.8 注册码
--->RM压缩助理 V1.1
Tags:  压缩 解压

芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们