贴一段Zlib的压缩和解压缩函数

蓝色光芒 2005-12-17 05:21:27
unit ZlibExpand;

interface

uses
Windows, Messages, SysUtils, Classes , Zlib;

Function CompressStr(Const S : String) : String;
Function DeCompressStr(Const S : String) : String;

implementation

Function CompressStr(Const S : String) : String;
var
CompressionStream : TCompressionStream;
OutS , RetS : TMemoryStream;
Count : Integer;
begin
Count := Length(S);
OutS := TMemoryStream.Create;
CompressionStream := TCompressionStream.Create(clDefault, OutS);
Try
Count := CompressionStream.Write(Pointer(S)^,Count);
except
Result := S;
CompressionStream.Free;
OutS.Free;
Exit;
end;
CompressionStream.Free;
OutS.Position := 0;
RetS := TMemoryStream.Create;
RetS.Write(Count , SizeOf(Count));
OutS.SaveToStream(RetS);
OutS.Free;

RetS.Position := 0;
Count := RetS.Size;
SetLength(Result , Count);
ZeroMemory(@Result[1],Count);
RetS.Read(Pointer(Result)^,Count);
RetS.Free;
end;

Function DeCompressStr(Const S : String) : String;
var
nSize: integer;
DecompressionStream: TDecompressionStream;
InS : TMemoryStream;
begin
InS := TMemoryStream.Create;
InS.Write(Pointer(S)^, Length(S));
InS.Position := 0;
Ins.Read(nSize,SizeOf(nSize));
try
DecompressionStream := TDecompressionStream.Create(InS);
except
end;
try
SetLength(Result, nSize);
DecompressionStream.Read(Pointer(Result)^, nSize);
except
end;
FreeAndNil(DecompressionStream);
FreeAndNil(InS);
end;

end.
...全文
137 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2005-12-17
  • 打赏
  • 举报
回复
0分贴,可以自己删除?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧