日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Delphi使用Zlib

發布時間:2024/1/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Delphi使用Zlib 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
uses?
??zlib;?

//將Src使用Zlib壓縮后存入Dst當中?
procedure?PackStream(const?Src:TStream;?Dst:TStream);?
var?
??CompStream:?TCompressionStream;?
begin?
??
//增加“斷言”以防止輸入參數有誤?
??Assert(Src?
<>?Nil);?
??Assert(Dst?
<>?Nil);?

??CompStream?:
=?TCompressionStream.Create(clDefault,Dst);?
??
try?
????
//將源數據的偏移轉到首部?
????Src.Seek(
0,soFromBeginning);?
????
//使用CopyFrom將源數據輸入到壓縮流,以實現壓縮?
????CompStream.CopyFrom(Src,
0);?
??
finally?
????CompStream.Free;?
??
end;?
end;?

//將以zlib壓縮的Src解壓縮后存入Dst當中?
procedure?UnpackStream(const?Src:TStream;?Dst:TStream);?
var?
??DecompStream:?TDecompressionStream;?
??NewSize:?Int64;?
begin?
??
//增加“斷言”以防止輸入參數有誤?
??Assert(Src?
<>?Nil);?
??Assert(Dst?
<>?Nil);?

??DecompStream:
=?TDecompressionStream.Create(Src);?
??
try?
????
//將源數據的偏移轉到首部?
????NewSize?:
=?Src.Seek(0,?soFromEnd);?
????Src.Seek(
0,?soFromBeginning);?
????
//使用CopyFrom將源數據輸入到解壓縮流,以實現解壓縮?
????
//并得到實際解壓縮后的數據大小(NewSize)?
????
//內部會使用AllocMem(System單元定義)對Dst進行內存重新分配?
????
//所以,Dst的內存管理必須兼容AllocMem進行內存分配?
????NewSize?:
=?Dst.CopyFrom(DecompStream,NewSize);?
????
//重新設置Dst的實際大小(已經在解壓縮過程當中進行重新分配)?
????Dst.Size?:
=?NewSize;?
??
finally?
????DecompStream.Free;?
??
end;?
end;?

//測試代碼?
procedure?Test;?
var?
??SrcStream,PackedStream,UnpackedStream:TMemoryStream;?
begin?
??SrcStream?:
=?TMemoryStream.Create;?
??
try?
????SrcStream.LoadFromFile(
'c:\test.xml');?
????PackedStream?:
=?TMemoryStream.Create;?
????
try?
??????
//壓縮?
??????PackStream(SrcStream,?PackedStream);?

??????PackedStream.Seek(
0,?soFromBeginning);?
??????PackedStream.SaveToFile(
'c:\test_xml.pk');?
??????UnpackedStream?:
=?TMemoryStream.Create;?
??????
try?
????????
//解壓縮?
????????UnpackStream(PackedStream,?UnpackedStream);?

????????UnpackedStream.Seek(
0,?soFromBeginning);?
????????UnpackedStream.SaveToFile(
'c:\test_xml.xml');?
??????
finally?
????????UnpackedStream.Free;?
??????
end;?
????
finally?
??????PackedStream.Free;?
????
end;?
??
finally?
????SrcStream.Free;?
??
end;?
end;

總結

以上是生活随笔為你收集整理的Delphi使用Zlib的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。