Gem используется для работы с данными, упакованными методом LZMA.
Нетривиальна
gem install ruby-xz
Gem предоставляет нам простейший набор методов, большая часть из которых является обёртками для более низкоуровневых методов, но всё равно приятно.
class XZ def compress_stream(io, compression_level = 6, check = :crc64, extreme = false, &block) ... end end
io | Непосредственно Stream |
compression_level | От 0 до 9 |
check | Способ проверки целостности (:none, :crc32, :crc64, :sha256) |
extreme | Получение последнего бита компрессии1) |
block | Блок для выполнения |
Если блок не передан - вернутся данные, в противном случае количество записанных байт.
Так же есть и обратный метод - распаковки
class XZ def decompress_stream(io, memory_limit = LibLZMA::UINT64_MAX, flags = [:tell_unsupported_check], &block) ... end end
io | Непосредственно Stream |
memory_limit | Лимит памяти для liblzma |
flags | Флаги для liblzma, передаются массивом (:tell_no_check - выведет предупреждение, что нет контрольной суммы, :tell_unsupported_check - выведет предупреждение о неподдерживаемом типе рассчёта контрольной суммы, :concatenated - распаковка сцепленных архивов |
&block | Блок для выполнения |
При передаче блока - вернёт количество распакованных байт, в противном случае строку.
Обёртка для compress_stream и decompress_stream.
class XZ def compress_file(in_file, out_file, compression_level = 6, check = :crc64, extreme = false) ... end def decompress_file(in_file, out_file, memory_limit = LibLZMA::UINT64_MAX, flags = [:tell_unsupported_check]) ... end end
Аргументы в большинстве своём те же, что и при работе с потоками.
Так же обёртка методов работы с потоками
class XZ def compress(str, compression_level = 6, check = :crc64, extreme = false) ... end def decompress(str, memory_limit = LibLZMA::UINT64_MAX, flags = [:tell_unsupported_check]) ... end end