Що таке файл LZ4?
Файл із розширенням .lz4 – це стиснутий архівний файл, створений за допомогою програм/утиліт, які підтримують стиснення LZ4. Алгоритм LZ4 фокусується на компромісі між швидкістю та ступенем стиснення. Стиснуті архіви LZ4 можна створити за допомогою утиліти командного рядка LZ4 і розпакувати за допомогою тієї самої програми.
Формат файлу LZ4
Формат файлу LZ4, заснований на алгоритмі стиснення LZ4, не залежить від типу ЦП, операційної системи, файлової системи та набору символів. Він підходить для стиснення файлів і потокового стиснення за допомогою алгоритму LZ4. Початкова реалізація формату LZ4 була здійснена на мові C Янном Коллетом у 2011 році та доступна для довідки розробників на Github .
Формат кадру LZ4
Загальна структура формату файлу LZ4 наведена нижче.
МагіяNb | Ф. Дескриптор | Блок | (…) | Кінцева позначка | C. Контрольна сума |
---|---|---|---|---|---|
4 байти | 3-15 байт | 4 байти | 0-4 байти |
Магічне число
4 байти, формат Little endian. Значення: 0x184D2204
Дескриптор кадру
Дескриптор кадру складається з 3 t0 15 байтів і є найважливішою частиною специфікації. Разом поля Magic_Number і Frame_Descriptor називаються заголовком кадру LZ4, а його розмір коливається від 7 до 19 байтів. Це так, як показано нижче.
FLG | BD | (Розмір вмісту) | (Ідентифікатор словника) | HC |
---|---|---|---|---|
1 байт | 1 байт | 0 - 8 байт | 0 - 4 байти | 1 байт |
Блоки даних
Кожен блок даних дотримується наступного порядку.
Розмір блоку | дані | (Контрольна сума блоку) |
---|---|---|
4 байти | 0 - 4 байти |
EndMark
Потік блоків завершується, коли за останнім блоком даних слідує 32-розрядне значення 0x00000000.
Контрольна сума вмісту
Content_Checksum перевіряє дійсність вмісту, який правильно декодується, і виконується за допомогою результату алгоритму xxHash-32. Він перевіряє результати успішної передачі всіх блоків у правильному порядку та без помилок.