Marshal数据太短而无法加载:加载数组

时间:2014-12-22 11:30:46

标签: ruby windows marshalling

DATA = [
[false, "aef012.documents", "path", 9, 1], [false, "test.documents", "path", 7, 1], 
[false, "test.documents", "path", 182, 2], [false, "test.sw", "path", 1, 3], 
[false, "test.rm_git_h1_hw", "path", 1, 4], [false, "test.rm_git_h1_mech", "path", 1, 5], 
[false, "test.rm_git_h1_others", "path", 1, 6], [false, "test.rm_git_h_doc", "path", 1, 7]
  ]

test_data = Marshal.dump(DATA)
#Returns some marshal data

File.open('test.txt', 'w') {|f| f.write(test_data) }
#360

DATA = Marshal.load File.read('test.txt')
# ArgumentError : marshal data too short. 

DATA数组有什么问题?为什么我得到参数错误。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我认为最好在Windows上使用二进制模式(注意b):

File.open('test.txt', 'wb') { |f| f.write(test_data) }

DATA = Marshal.load File.open('test.txt', 'rb').read

请参阅:“IO Open Mode