# brotli

Алгоритм сжатия данных без потерь, разработанный Google для эффективной упаковки веб-контента и других типов данных. Алгоритм обеспечивает высокую степень сжатия, превосходящую методы сжатия Gzip и Deflate, при сохранении высокой скорости декомпрессии.

## Особенности

- высокая степень сжатия, особенно для текстовых данных;
- оптимизированная скорость декомпрессии;
- поддержка потокового сжатия и распаковки;
- 11 уровней сжатия для баланса между скоростью и эффективностью;
- использование статического словаря для улучшения сжатия повторяющихся данных.

## Основные компоненты

Библиотека предоставляет API для работы со сжатием и распаковкой данных (подробнее с документацией можно ознакомиться [здесь](https://github.com/google/brotli)):

### Интерфейсы сжатия данных

API для преобразования исходных данных в сжатый формат Brotli. Включает функции для однократного сжатия буфера, инкрементального (потокового) кодирования, управления состоянием кодировщика и конфигурации алгоритма (качество, размер окна, режим).

- `BrotliEncoderCompress()` — одношаговое сжатие данных;
- `BrotliEncoderCreateInstance()` — создание экземпляра кодировщика для потокового сжатия;
- `BrotliEncoderCompressStream()` — пошаговая обработка данных при потоковом сжатии;
- `BrotliEncoderDestroyInstance()` — освобождение ресурсов кодировщика;
- `BrotliEncoderSetParameter()` — настройка параметров сжатия.

### Интерфейсы распаковки данных

API для восстановления исходных данных из сжатого потока Brotli. Предоставляет функции как для однократной декомпрессии буфера, так и для последовательной обработки потока сжатых данных с контролем состояния декодера.

- `BrotliDecoderDecompress()` — одношаговая распаковка данных;
- `BrotliDecoderCreateInstance()` — создание экземпляра декодировщика;
- `BrotliDecoderDecompressStream()` — пошаговая обработка сжатых данных;
- `BrotliDecoderDestroyInstance()` — освобождение ресурсов декодировщика;
- `BrotliDecoderHasMoreOutput()` — проверка доступности данных для чтения.

### Утилиты и вспомогательные функции

Дополнительный инструментарий для работы с библиотекой: функции для оценки буфера под сжатые данные, получения метаинформации (версия, параметры) и отладочные возможности.

- `BrotliEncoderMaxCompressedSize()` — вычисление максимального размера сжатых данных;
- `BrotliEncoderVersion()` и `BrotliDecoderVersion()` — получение версии библиотеки;
- `BrotliEncoderGetParameter()` — получение текущих параметров кодировщика.

### Интеграция с системами отчетов

Набор предопределённых значений для управления работой алгоритма сжатия: уровни качества (от 0 до 11), определяющие соотношение скорость/степень сжатия, и размер скользящего окна (от 1KB до 16MB), влияющий на использование памяти.

- `BROTLI_DEFAULT_QUALITY` (11) — уровень сжатия по умолчанию (максимальный).
- `BROTLI_MIN_QUALITY` (0) и `BROTLI_MAX_QUALITY` (11) — минимальный и максимальный допустимые уровни сжатия.
- `BROTLI_DEFAULT_WINDOW` (22) — размер окна сжатия по умолчанию (логарифм от размера в байтах).
- `BROTLI_MIN_WINDOW_BITS` (10) и `BROTLI_MAX_WINDOW_BITS` (24) — минимальный и максимальный допустимые размеры окна сжатия.
