From: Robert Klemme Date: 2008-06-06T04:49:10+09:00 Subject: Re: marshalling and serialiing to IO problem On 05.06.2008 20:34, Junkone wrote: > hello > i am trying to serialise a object to file. i have errors when i try to > restore the object. any ideas > > for eg > irb(main):009:0> a=Hash.new > => {} > irb(main):010:0> a[1]='key' > => "key" > irb(main):011:0> a[1]='kew' > => "kew" > irb(main):016:0> a=> {1=>"kew"} > irb(main):022:0> f=File.new("c:\\temp\\log",File::CREAT|File::TRUNC| > File::RDWR) > => # > irb(main):023:0> data=Marshal.dump(a,f) > => # > irb(main):024:0> f.close > => nil > irb(main):025:0> f1=File.open("c:\\temp\\log",File::NONBLOCK| > File::RDONLY) > => # > irb(main):026:0> Z=Marshal.load(f1) > IOError: not opened for reading from (irb):26:in `getc' > from (irb):26:in `load' > from (irb):26 Works for me. Why do you open in nonblocking mode? That might cause issues on your system and it's not needed. Also, why do you open in RW mode when you want to write only? Here's what I usually do irb(main):001:0> a={1=>2} => {1=>2} irb(main):002:0> File.open("foo","wb") {|io| Marshal.dump(a,io)} => # irb(main):007:0> File.open("foo","rb") {|io| Marshal.load io} => {1=>2} If you prefer boolean flags: irb(main):009:0> File.open("foo", File::WRONLY | File::BINARY) {|io| Marshal.dump(a,io)} => # irb(main):010:0> File.open("foo", File::RDONLY | File::BINARY) {|io| Marshal.load io} => {1=>2} Cheers robert