2014-11-20 2 views
0

Я пытаюсь прочитать конкретный файл из файла tar.gz используя следующий кодпрочитать файл из tar.gz файла в рубин

def get_data_file_file(file, type) 
    begin 
     Gem::Package::TarReader.new(Zlib::GzipReader.open(file)).each do |entry| 
     if(entry.full_name == type) 
      return entry.read 
     end 
     end 
    rescue Zlib::GzipFile::Error => e 
     stacktrace = e.backtrace.join("\n") 
     LOGGER.error("ERROR: #{e.message}\n #{stacktrace}") 
     return nil 
    end 
    return nil 
end 

Но проблема исходит из размера файла в качестве «входа .read "прочитайте весь файл за один выстрел и сохраните его в памяти.

Кто-нибудь знает о каких-либо альтернативах? Любая помощь приветствуется.

Спасибо. Amit

ответ

0

Попробуйте прочитать его кусок от куска, давая аргумент для чтения с числом байтов вы хотите прочитать:

entry.read(1024*1024) #1mb each time 

Более подробная информация здесь: Read a file in chunks in Ruby

+0

Спасибо за ответ. Да, я могу использовать предложенный вами метод, но я смотрю, есть ли какая-либо другая библиотека, которая предлагает прочитать сжатый файл по строкам. – Amit

Смежные вопросы