【发布时间】:2014-02-13 19:03:52
【问题描述】:
我需要将大量对象序列化为一个文件(多个 GB)。我们选择在这个项目中使用谷歌的协议缓冲区来处理其他事情,所以我想我会用它来序列化我从网络接收到的对象。这似乎有效:
File.open(file_name, 'ab') do |f|
some_objects.each { |some_object|
some_object.serialize(f)
}
end
反序列化是给我带来问题的原因。我见过其他人这样做:
File.open(file_name, 'r') do |f|
no = some_object.parse(f)
end
但这只是一个。我试过这样做:
File.open(file_name, 'r').each do |f|
no = some_object.parse(f)
end
但这引发了这个异常:
Uncaught exception: undefined method `<<' for false:FalseClass
我需要获取所有这些并懒惰地评估它们。有什么想法吗?请随时就此代码的性能提供任何建议,因为我将做 GB 的信息。感谢您的宝贵时间。
顺便说一句,我知道我需要升级我的 ruby 版本,但由于这是内部问题,我一直无法从老板那里得到时间来升级它。
【问题讨论】:
标签: ruby deserialization protocol-buffers lazy-evaluation ruby-1.8.7