我得到了这样的课程
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)存储到二进制文件中,我认为它被称为序列化。我谷歌它,发现标准库中的元帅可以做到这一点。 以下是根据Internet上的示例我如何执行此操作的示例:
#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的值存储到二进制文件中。如何更改代码以实现此目的?提前谢谢!
BTW:存储在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 =>“失败”}
答案 0 :(得分:2)
四个字节?碰巧的是,编组空数组[]
会在我的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