- D Cookbook
- Adam D. Ruppe
- 251字
- 2021-07-16 11:50:47
Using the std.zlib compression
Phobos provides a wrapper for the common zlib
/gzip
/DEFLATE
compression algorithm. This algorithm is used in the .zip
files, the .png
images, the HTTP protocol, the common gzip
utility, and more. With std.zlib
, we can both compress and decompress data easily.
How to do it…
Let's compress and decompress data by executing the following steps:
- Import
std.zlib
. - Create an instance of
Compress
orUnCompress
, depending on what direction you want to go. - Call the
compress
oruncompress
methods for each block of data, concatenating the pieces together as they are made. - Call
flush
to get the last block of data.
The code is as follows:
void main() { import std.zlib, std.file; auto compressor = new Compress(HeaderFormat.gzip); void[] compressedData; compressedData ~= compressor.compress("Hello, "); compressedData ~= compressor.compress("world!"); compressedData ~= compressor.flush(); std.file.write("compressed.gz", compressedData); }
Running the program will create a file, compressed.gz
, which can be unzipped to become a text file with Hello, world!
.
How it works…
The std.zlib
module doesn't follow exactly the same pattern as std.digest
(the implementation of std.zlib
was written before ranges were incorporated into Phobos), but it is a very simple API. It works with one block of data at a time, returning the compressed or uncompressed block. When finished, the flush
method clears any partial blocks, returning the final piece of data.
There are also convenience functions, compress
and uncompress
, that can perform the operation in a single function call if you have all the data available as a single array at once.
- Vue 3移動Web開發與性能調優實戰
- 數據庫系統原理及MySQL應用教程(第2版)
- C++程序設計(第3版)
- Visual Studio 2012 Cookbook
- Java面向對象思想與程序設計
- C# 從入門到項目實踐(超值版)
- Learning Data Mining with Python
- 區塊鏈:以太坊DApp開發實戰
- Kinect for Windows SDK Programming Guide
- 量化金融R語言高級教程
- Selenium Testing Tools Cookbook(Second Edition)
- C/C++程序員面試指南
- 微服務架構深度解析:原理、實踐與進階
- Java網絡編程實戰
- HTML5游戲開發實戰