Class: LZMA

Inherits:
Object
  • Object
show all
Defined in:
lib/lzma.rb,
lib/lzma.rb

Defined Under Namespace

Modules: C Classes: Stream

Class Method Summary collapse

Class Method Details

.decompress(what, buf_len = 4096, &blk) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lzma.rb', line 25

def self.decompress(what, buf_len=4096, &blk)
  bais = what.is_a?(IO) ? what.to_inputstream : Java::java.io.ByteArrayInputStream.new(what.to_s.to_java_bytes)
  lis = Java::net.contrapunctus.lzma.LzmaInputStream.new(bais)
  dis = Java::java.io.DataInputStream.new(lis)
  res = ''
  blk ||= lambda {|chunk| res << chunk }
  expanded, read = Java::byte[buf_len].new, 0

  while (read = dis.read(expanded, 0, buf_len)) > 0
    blk.call(String.from_java_bytes(expanded[0, read]))
  end

  dis.close

  block_given? ? what : res
end

.extract(file, to = nil, buf_len = 4096) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/lzma.rb', line 42

def self.extract(file, to=nil, buf_len=4096)
  to ||= file.gsub(/\.(xz|lzma)$/, '')
  File.unlink(to) if File.file?(to)

  bais = Java::java.io.FileInputStream.new(file)
  lis = Java::net.contrapunctus.lzma.LzmaInputStream.new(bais)
  dis = Java::java.io.DataInputStream.new(lis)
  out = Java::java.io.FileOutputStream.new(to)
  expanded, read = Java::byte[buf_len].new, 0

  while (read = dis.read(expanded, 0, buf_len)) > 0
    out.write(expanded[0, read])
  end

  dis.close

  to
end