我需要将大量对象序列化为一个文件(多个 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 版本,但由于这是内部问题,我一直无法从老板那里得到时间来升级它。