std.zlib
Сжимать/распаковывать данные с помощью библиотеки zlib.
- Примеры:
- Если у вас небольшой буфер, вы можете использовать
compressиuncompressнапрямую.import std.zlib; auto src = "the quick brown fox jumps over the lazy dog\r the quick brown fox jumps over the lazy dog\r"; ubyte[] dst; ubyte[] result; dst = compress(src); result = cast(ubyte[]) uncompress(dst); assert(result == src);
Когда данные для сжатия не помещаются в один буфер, используйтеCompressиUnCompress.import std.zlib; import std.stdio; import std.conv : to; import std.algorithm.iteration : map; UnCompress decmp = new UnCompress; foreach (chunk; stdin.byChunk(4096).map!(x => decmp.uncompress(x))) { chunk.to!string.write; }
- Ссылки
- Википедия
- Лицензия:
- Лицензия Boost 1.0.
- Авторы:
- Уолтер Брайт
- Исходный код
- std/zlib.d
- class ZlibException: object.Exception;
-
Ошибки генерируют исключение ZlibException.
- uint adler32(uint adler, const(void)[] buf);
-
Вычислить контрольную сумму Adler-32 для данных в буфере.
- Параметры:
uint adlerначальное значение контрольной суммы для вычисления. Используйте 1 для новой контрольной суммы. Используйте результат этой функции для кумулятивной контрольной суммы. const(void)[] bufбуфер, содержащий входные данные
- Возвращаемое значение:
- контрольная сумма
uintдля предоставленных входных данных и начального значения контрольной суммы
- См. также:
- http://en.wikipedia.org/wiki/Adler-32
- Примеры:
-
static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; uint adler = adler32(0u, data); writeln(adler); // 0xdc0037
- uint crc32(uint crc, const(void)[] buf);
-
Вычислить контрольную сумму CRC32 для данных в буфере.
- Параметры:
uint crcначальное значение контрольной суммы для вычисления. Используйте 0 для новой контрольной суммы. Используйте результат этой функции для кумулятивной контрольной суммы. const(void)[] bufбуфер, содержащий входные данные
- Возвращаемое значение:
- контрольная сумма
uintдля предоставленных входных данных и начального значения контрольной суммы
- См. также:
- http://en.wikipedia.org/wiki/Cyclic_redundancy_check
- ubyte[] compress(const(void)[] srcbuf, int level);
ubyte[] compress(const(void)[] srcbuf); -
Сжать данные
- Параметры:
const(void)[] srcbufбуфер, содержащий данные для сжатия int levelуровень сжатия. Допустимые значения от -1 до 9, при -1 используется значение по умолчанию (6), 0 - без сжатия, 1 - минимальное сжатие, 9 - максимальное сжатие.
- Возвращаемое значение:
- сжатые данные
- void[] uncompress(const(void)[] srcbuf, size_t destlen = 0u, int winbits = 15);
-
Распаковывает данные в srcbuf[].
- Параметры:
const(void)[] srcbufбуфер, содержащий сжатые данные. size_t destlenразмер распакованных данных. Точное значение не обязательно, но распаковка будет быстрее, если точный размер указан. int winbitsлогарифм по основанию 2 максимального размера окна.
- Возвращаемое значение:
- распакованные данные.
- enum HeaderFormat: int;
-
форма заголовка сжатого потока
- deflate
-
стандартный заголовок zlib
- gzip
-
заголовок формата файла gzip
- determineFromData
-
используется при распаковке. Попытаться автоматически определить формат потока, просматривая данные
- class Compress;
-
Используется, когда данные для сжатия не помещаются в один буфер.
- this(int level, HeaderFormat header = HeaderFormat.deflate);
this(HeaderFormat header = HeaderFormat.deflate); -
Конструктор.
- Параметры:
int levelуровень сжатия. Допустимые значения от 1 до 9, при 1 - минимальное сжатие, 9 - максимальное. Значение по умолчанию 6. HeaderFormat headerустанавливает тип сжатия на один из вариантов, доступных в HeaderFormat. По умолчанию HeaderFormat.deflate.
- См. также:
-
compress,HeaderFormat
- const(void)[] compress(const(void)[] buf);
-
Сжимает данные в buf и возвращает сжатые данные.
- Параметры:
const(void)[] bufданные для сжатия
- Возвращаемое значение:
- сжатые данные. Буферы, возвращаемые поочередно, должны быть объединены.
- void[] flush(int mode = Z_FINISH);
-
Сжимает и возвращает оставшиеся данные. Возвращаемые данные должны быть добавлены к данным, возвращенным compress().
- Параметры:
int modeодно из следующих значений: - Z_SYNC_FLUSH
- Синхронизирует сброс до следующей границы байта. Используется, когда позже будут сжиматься дополнительные данные.
- Z_FULL_FLUSH
- Синхронизирует сброс до следующей границы байта. Используется, когда позже будут сжиматься дополнительные данные, и декомпрессор должен быть перезапустим на этом этапе.
- Z_FINISH
- (по умолчанию) Используется при завершении сжатия данных.
- this(int level, HeaderFormat header = HeaderFormat.deflate);
- class UnCompress;
-
Используется, когда данные для распаковки не помещаются в один буфер.
- this(uint destbufsize);
this(HeaderFormat format = HeaderFormat.determineFromData); -
Конструирование. destbufsize такой же, как для D.zlib.uncompress().
- const(void)[] uncompress(const(void)[] buf);
-
Распаковывает данные в buf и возвращает распакованные данные. Буферы, возвращаемые поочередно, должны быть объединены.
- void[] flush();
-
Распаковывает и возвращает оставшиеся данные. Возвращаемые данные должны быть добавлены к данным, возвращенным uncompress(). Объект UnCompress больше нельзя использовать.
- const @property bool empty();
-
Возвращает true, если все входные данные были распакованы и больше данных распаковать нельзя (inflate() вернул Z_STREAM_END)
- Примеры:
-
// some random data ubyte[1024] originalData = void; // append garbage data (or don't, this works in both cases) auto compressedData = cast(ubyte[]) compress(originalData) ~ cast(ubyte[]) "whatever"; auto decompressor = new UnCompress(); auto uncompressedData = decompressor.uncompress(compressedData); assert(uncompressedData[] == originalData[], "The uncompressed and the original data differ"); assert(decompressor.empty, "The UnCompressor reports not being done");
- this(uint destbufsize);
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_zlib.html