Spec-Zone.ru › D

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
(по умолчанию) Используется при завершении сжатия данных.
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");

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_zlib.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API