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

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

主站蜘蛛池模板: 涿鹿县| 杂多县| 万安县| 卢氏县| 深州市| 漯河市| 涪陵区| 土默特左旗| 岫岩| 邹平县| 米脂县| 缙云县| 德格县| 开鲁县| 崇仁县| 昌都县| 叶城县| 岳普湖县| 桐城市| 余江县| 寿宁县| 灵石县| 兴隆县| 疏勒县| 花莲县| 视频| 朝阳区| 岑巩县| 乌拉特中旗| 共和县| 类乌齐县| 灯塔市| 台南市| 通州区| 台南市| 平果县| 江都市| 简阳市| 乌兰察布市| 濮阳市| 罗田县|