官术网_书友最值得收藏!

  • 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:

  1. Import std.zlib.
  2. Create an instance of Compress or UnCompress, depending on what direction you want to go.
  3. Call the compress or uncompress methods for each block of data, concatenating the pieces together as they are made.
  4. 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.

主站蜘蛛池模板: 涟水县| 兴山县| 济宁市| 瑞丽市| 金门县| 凤庆县| 贵定县| 清丰县| 托克托县| 祁阳县| 吉安市| 金昌市| 壶关县| 巫山县| 石景山区| 丘北县| 那曲县| 大方县| 盘锦市| 大厂| 松江区| 绥棱县| 洪湖市| 专栏| 福贡县| 襄汾县| 连城县| 来安县| 泰州市| 河北区| 留坝县| 望都县| 怀柔区| 淄博市| 阆中市| 婺源县| 肥城市| 绥阳县| 缙云县| 辽阳市| 涡阳县|