Три режима, одно решение
Lightning — за скорость, Balanced — середина, Compact — за размер. Панель прямо говорит, какой самый быстрый, а какой самый компактный, вместо того чтобы прятать это за числом от 1 до 9.
Эта страница пока не переведена на Русский, поэтому показана по-английски. Сама программа переведена на Русский полностью.
Возможности
То, что действительно сделано, проверено и работает. Незаконченное названо на этой же странице прямо, а не намёком.
Lightning — за скорость, Balanced — середина, Compact — за размер. Панель прямо говорит, какой самый быстрый, а какой самый компактный, вместо того чтобы прятать это за числом от 1 до 9.
Поиск совпадений, канонический этап Хаффмана и двухуровневая таблица декодирования — всё это код самого проекта. Ни одна сторонняя библиотека сжатия в программу не встроена.
Блоки сжимаются параллельно на разрешённом вами числе процессоров, в рамках предела памяти, заданного в настройках. С меньшим пределом работа всё равно завершится — просто перекрытия будет меньше.
Версии одного документа, выгрузки с одной схемой, журналы одного формата: словарь, построенный по ним всем, дал измеренные 16,7 % от архива, который те же файлы дают без него. По умолчанию выключено, потому что в разношёрстной папке это ничего не даёт.
.jab — родной контейнер: быстрее всех пишется, несёт контрольные суммы по блокам и единственный из трёх может здесь нести пароль. .zip и .7z пишутся без изысков, чтобы любой другой инструмент открыл их без претензий.
Store и deflate для ZIP, папки LZMA2 для 7z, включая фильтр переходов x86 при чтении, ustar с длинными именами GNU для tar.
В .zip, записанном здесь, нет ни AES, ни расширенных меток времени, ни прав Unix. В .7z — одна папка LZMA2 на сплошной блок и никаких пофайловых фильтров. Если нужно лучшее сжатие, SHA-256 по блокам или пароль — ответ .jab.
По одной записи на блок, 96-битный одноразовый вектор и 128-битный тег — из собственной реализации операционной системы. В этом проекте криптография не изобретается.
Манифест — имена файлов, размеры, метки времени, атрибуты — это одна зашифрованная запись, и такова же таблица фрагментов с значениями SHA-256 и CRC-32C по каждому блоку.
Тег по пустому открытому тексту сообщает читателю, что пароль неверен, после единственного вывода PBKDF2, а не после декодирования всего архива.
Зарезервируйте от 1 до 30 % запасных данных внутри .jab — и повреждённый блок можно будет восстановить, а не только обнаружить. Добавлять её нужно до повреждения, и нести её может только .jab.
Каждый блок несёт CRC-32C; SHA-256 по блокам включён, пока вы его не выключите. Первый говорит, что блок испорчен, второй делает незамеченную ошибку практически невозможной.
Тщательная проверка читает заголовок, концевик, таблицу фрагментов и манифест на согласованность, а затем декодирует каждый блок. Только декодирование пропускает структурный проход. Ни та, ни другая не пишут файлов.
Ни одна из проверок не скажет вам, что архив не подменяли: тот, кто может изменить данные, может пересчитать оба значения. На этот вопрос отвечает только архив с паролем.
Архив пишется в файл .partial и переименовывается, когда он завершён, — поэтому прерванный запуск никогда не оставит того, что выглядит готовым.
Пишет .001, .002, … рядом с архивом по 10, 25, 100 или 700 МБ либо по введённому вами размеру. Отдельные части сами по себе не читаются; при сборке каждая часть проверяется до записи.
Сравнивает файлы целиком по SHA-256 внутри архива, поэтому сообщается только о точных копиях, и показывает, сколько места освободит удаление лишних. Пустые файлы пропускаются.
Проверяет, соответствует ли папка тому, что было заархивировано. Хешируются обе стороны, поэтому найдётся и изменение, сохранившее тот же размер и ту же метку времени.
Сканирование сообщает, какие фрагменты повреждены, и ничего не пишет. Восстановление переписывает ровно те части, которые испорчены, опираясь на запись для восстановления.
Ни веб-представления, ни фреймворка: интерфейс рисуется средствами Direct2D и DirectWrite — поэтому он запускается мгновенно и остаётся отзывчивым, пока идёт задача.
Откройте архив, отсортируйте и отфильтруйте его содержимое и посмотрите текст, изображения, PDF — одну страницу — и звук, не распаковывая заранее.
Задачи выполняются по одной в порядке добавления. Ожидающую задачу можно переставить или убрать, текущую — приостановить, а длинную отправить в фон, вместо того чтобы блокировать окно.
Найдите архив по имени, затем нажмите Enter, чтобы заглянуть внутрь найденных. Программа прямо скажет, сколько прочитано, сколько не найдено и сколько не удалось открыть.
Пункты контекстного меню для сжатия, распаковки и проверки добавляются на экране настроек и убираются там же.
Каждая строка интерфейса переведена на 28 языков, с правилами множественного числа для каждого языка, а не с одним английским правилом на всех.
Тот же движок, пригодный для сценариев. Создание, распаковка, список, тест и проверка, где число потоков, бюджет памяти и уровень целостности задаются ключами. Пароль никогда не принимается аргументом — полную командную строку работающего процесса могут прочитать другие процессы той же учётной записи, — поэтому он читается со стандартного ввода или запрашивается без эха.
Руководство> jab c .\project -o project.jab --mode lightning
scanning 412 files, 268 MB
writing project.jab
output 96.4 MB (36.0% of input)
elapsed 1.84 s — 145.7 MB/s
> jab t project.jab
412 entries · 268 MB checked · structure and every block
ok
> jab x project.jab -o .\restored --overwrite fail
412 files written, 0 skipped
elapsed 0.94 s
Нет установщика и нет подписи кода: 1.0 — портативная сборка, и Windows предупредит о неподписанной программе.
Нет раскладки справа налево — именно поэтому арабский и иврит переведены, но не выпущены.
Инкрементный архив не умеет фиксировать удаление, а файлы-ключи не реализованы.
Масштабирование по потокам всё ещё уступает RAR, и RAR5 Normal по-прежнему сжимает сильнее.