【问题标题】:ruby Marshal serializationruby Marshal 序列化
【发布时间】:2012-07-10 11:53:33
【问题描述】:

感谢您的宝贵时间!

我有这样的课程

class Vuser

    def initialize (logfile_name, iteration_hash)
        @logfile_name = logfile_name
        @iteration_hash = iteration_hash
    end

    attr_accessor :logfile_name, :iteration_hash

    def output_iteration_info ()
        puts @logfile_name
        puts @iteration_hash
    end
end

还有一个数组来存储 Vuser 类的实例。假设数组的名称是 vuser_ary。

我想将此数组 ( vuser_ary ) 存储到一个二进制文件中,我认为这称为序列化。我用谷歌搜索,发现标准库中的 Marshal 可以做到这一点。 这是我根据互联网上的示例如何执行此操作的示例:

#serialization
File.open("some.file","wb") do |file|
   Marshal.dump(vuser_ary,file)
end

#loading
vuser_ary = nil
File.open("some.file","rb") {|f| vuser_ary = Marshal.load(f)}

但是当我检查 some.file 的大小时。我发现它只有四个字节。然后我意识到some.file中存储的数据可能是引用而不是vuser_ary的值。

那么我的问题是如何将 vuser_ary 的值存储到二进制文件中。如何更改我的代码以实现这一目标?提前致谢!

顺便说一句:存储在 vuser_ary 中的值将是这样的:

RO_3.2_S4_CommericalRealEstate1_274.log

{1=>“失败”、2=>“失败”、3=>“通过”、4=>“通过”、5=>“失败”}

RO_3.2_S4_CommericalRealEstate1_275.log

{11=>“失败”、2=>“失败”、3=>“失败”、4=>“通过”、5=>“失败”

RO_3.2_S4_CommericalRealEstate1_276.log

{1=>“失败”、2=>“失败”、3=>“通过”、4=>“通过”、5=>“失败”}

RO_3.2_S4_CommericalRealEstate1_277.log

{1=>“失败”、2=>“失败”、3=>“通过”、4=>“通过”、5=>“失败”}

RO_3.2_S4_CommericalRealEstate1_278.log

{1=>“失败”、2=>“失败”、3=>“通过”、4=>“通过”、5=>“失败”}

RO_3.2_S4_CommericalRealEstate1_279.log

{1=>“失败”、2=>“失败”、3=>“通过”、4=>“通过”、5=>“失败”}

RO_3.2_S4_CommericalRealEstate1_280.log

{1=>“失败”、2=>“失败”、3=>“失败”、4=>“通过”、5=>“失败”}

【问题讨论】:

    标签: ruby marshalling


    【解决方案1】:

    四个字节?碰巧编组空数组 [] 在我的 Ruby 上生成一个 4 字节字符串:

    > Marshal.dump([]).length
     => 4 
    

    您确定vuser_ary 在您尝试编组时不为空吗?

    碰巧的是,对对象的“引用”和对象本身之间没有区别:Ruby 中没有指针,所以如果你有一个数组(并且它不是空的),那么它将被编组:

    > Marshal.dump([1, 2, 3]).length
     => 10
    

    为了更好的衡量:

    > vuser_ary = [{1=>"Fail", 2=>"Fail", 3=>"Pass", 4=>"Pass", 5=>"Fail"}]
     => [{1=>"Fail", 2=>"Fail", 3=>"Pass", 4=>"Pass", 5=>"Fail"}] 
    > Marshal.dump(vuser_ary).length
     => 72  
    

    【讨论】:

    • 谢谢伦。我查看了我的脚本,发现 vuser_ary 在那一步是空的。其实昨天我在关注参考和价值的东西,你真的帮了我很多~
    • @user1476512:很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2012-09-09
    • 2011-10-16
    • 1970-01-01
    • 2013-08-21
    • 2011-07-05
    • 2018-01-09
    相关资源
    最近更新 更多