Ruby XZ

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
1)
надо читнуть доку по LZMA