我正在尝试使用以下代码从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
但问题来了,因为文件的大小为“entry.read”一次性读取整个文件并保留在内存中。
任何人都知道其他选择吗?任何帮助表示赞赏。
感谢。 阿米特
答案 0 :(得分:0)
尝试通过块读取块,通过给出一个参数来读取你想要读取的字节数:
entry.read(1024*1024) #1mb each time