【发布时间】:2019-10-16 19:33:30
【问题描述】:
我有一个 27MB 的 .gz 文件(解压缩后为 127MB)。使用 ruby 的 Zlib 解压缩文件会返回格式正确的数据,但文件会被截断为预期大小的一小部分(253,000 行数据中的 1290 行数据)。
string_io = StringIO.new(body)
file = File.new("test.json.gz", "w+")
file.puts string_io.read
file.close
# string_io.read.length == 26_675_650
# File.size("test.json.gz") == 27_738_775
使用 GzipReader:
data = ""
File.open(file.path) do |f|
gz = Zlib::GzipReader.new(f)
data << gz.read
gz.close
end
# data.length = 603_537
使用不同的 GzipReader 方法:
data = ""
Zlib::GzipReader.open(file.path) do |gz|
data << gz.read
end
# data.length == 603_537
使用 gunzip:
gz = Zlib.gunzip(string_io.read)
# gz.length == 603_537
预期大小为 127,604,690,但我只能提取 603,537。在我的终端中使用 gunzip 可以正确提取整个文件,但我正在寻找一种编程方式来处理这个问题。
【问题讨论】:
-
你在哪里定义
body? -
@lacostenycoder
body是我从 S3 存储桶中提取的字符串
标签: ruby-on-rails ruby gzip zlib