首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将对象保存到文件?

如何将对象保存到文件?
EN

Stack Overflow用户
提问于 2010-11-30 11:12:26
回答 3查看 23.1K关注 0票数 25

我想将对象保存到文件中,然后轻松地从文件中读取它。举个简单的例子,假设我有下面的3d数组:

代码语言:javascript
复制
m = [[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]],
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]]

有没有一个简单的Ruby API可以用来实现这一点,而不需要编写解析器来解释文件中的数据?在我给出的例子中,这很简单,但随着对象变得越来越复杂,使对象持久化变得很烦人。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-30 11:20:27

Stack Overflow用户

发布于 2010-11-30 11:34:15

您需要序列化这些对象,然后才能将它们保存到文件中,并对它们进行反序列化以检索它们。正如科里提到的,有两个标准的序列化库被广泛使用:MarshalYAML

MarshalYAML分别使用dumpload方法进行序列化和反序列化。

下面是你如何使用它们:

代码语言:javascript
复制
m = [
     [
      [0, 0, 0],
      [0, 0, 0],
      [0, 0, 0]
     ],
     [
      [0, 0, 0],
      [0, 0, 0],
      [0, 0, 0]
     ]
    ]

# Quick way of opening the file, writing it and closing it
File.open('/path/to/yaml.dump', 'w') { |f| f.write(YAML.dump(m)) }
File.open('/path/to/marshal.dump', 'wb') { |f| f.write(Marshal.dump(m)) }

# Now to read from file and de-serialize it:
YAML.load(File.read('/path/to/yaml.dump'))
Marshal.load(File.read('/path/to/marshal.dump'))

您需要小心文件大小和其他与文件读/写相关的怪癖。

更多信息,当然可以在API文档中找到。

票数 53
EN

Stack Overflow用户

发布于 2010-11-30 14:51:05

YAML和Marshal是最明显的答案,但根据您计划如何处理数据,sqlite3也可能是一个有用的选择。

代码语言:javascript
复制
require 'sqlite3'

m = [[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]],
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]]

db=SQLite3::Database.new("demo.out")
db.execute("create table data (x,y,z,value)")
inserter=db.prepare("insert into data (x,y,z,value) values (?,?,?,?)")
m.each_with_index do |twod,z|
  twod.each_with_index do |row,y|
    row.each_with_index do |val,x|
      inserter.execute(x,y,z,val)
    end
  end
end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4310217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档