:pぴー.sendせんど(:pぴー, :pぴー)

mokoaki
mokoriso@gmail.com

2017/07/22

Marshal

Ruby技術者認定試験の書籍写経メモ

Marshal.dump メソッド

このメソッドで文字列化できない以下のようなオブジェクトが指定された時にはTypeErrorが発生する

Marshal.dump({a: 1, b: 2})
=> "\x04\b{\a:\x06ai\x06:\x06bi\a"

2つめの引数にIOクラスとそのサブクラスのオブジェクトを指定するとそのオブジェクトに直接書き出す

file = File.open('./temp.txt', 'w+') # 読み込み、上書き書き込みモード
=> #<File:./temp.txt>

Marshal.dump({a: 1, b: 2}, file)
=> #<File:./temp.txt>

file.close
=> nil

Marshal.loadメソッド

文字列化したデータからRubyのオブジェクトを復元する

data = Marshal.dump({a: 1, b: [1, 2, 3]})
=> "\x04\b{\a:\x06ai\x06:\x06b[\bi\x06i\ai\b"

Marshal.load(data)
=> {:a=>1, :b=>[1, 2, 3]}

引数に文字列ではなくIOオブジェクトを指定するとそのオブジェクトから直接読み戻す

file = File.open('./temp.txt', 'r') # 読み込み、上書き書き込みモード
=> #<File:./temp.txt>

Marshal.load(file)
=> {:a=>1, :b=>2}

file.close
=> nil