2

为了加快链中特定脚本的频繁重复运行,我开始将自定义对象序列化到磁盘上,否则这些对象会花费太多时间来聚合创建。

使用内置的 Yaml 和/或 Marshal。

Yaml 可以很好地序列化为看似健康的文本文件,但在尝试反序列化时会产生以下错误:

b2 = YAML::load(File.open("browserObj.yaml", 'r'))
Syck::TypeError: Invalid Regular expression: "/\\A\\s*\n        ([a-zA-Z][-+.a-zA-Z\\d]*):          ...and many more strange lines 

但是,即使尝试通过 Marshal 错误保存到二进制文件:

puts File.open("browserObj.bin", 'w').write Marshal::dump($browser)  
TypeError: can't dump TCPServer

# Marshal::dump($browser, File.open("browserObj.bin", 'wb'))  # same error

最后故意不做$browser.close,我可以选择让这个 TCPServer 在我的 Ruby 脚本生命周期之后保持活跃和运行。

关于我如何摆脱这个的任何想法?我保证在成功重新加载后会仔细检查任何套接字/内部对象的有效性,并在必要时简单地重新初始化一个全新的对象。

4

0 回答 0