# Marshalling and serialiing to IO problem

**URL:** <https://www.ruby-forum.com/t/marshalling-and-serialiing-to-io-problem/139654>\
**Category:** Ruby\
**Created:** [June 5, 2008, 8:35pm UTC](https://www.ruby-forum.com/t/marshalling-and-serialiing-to-io-problem/139654 "2008-06-05T20:35:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [June 5, 2008, 8:35pm UTC](https://www.ruby-forum.com/t/marshalling-and-serialiing-to-io-problem/139654/1 "2008-06-05T20:35:29Z")

</div>

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)  
=\> #\<File:c:\temp\log\>  
irb(main):023:0\> data=Marshal.dump(a,f)  
=\> #\<File:c:\temp\log\>  
irb(main):024:0\> f.close  
=\> nil  
irb(main):025:0\> f1=File.open(“c:\temp\log”,File::NONBLOCK|  
File::RDONLY)  
=\> #\<File:c:\temp\log\>  
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

---

<div class="post-metadata">

**Author:** ![Junkone](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e274bd/32.png) [@Junkone](https://www.ruby-forum.com/u/Junkone)\
**Post date:** [June 5, 2008, 9:51pm UTC](https://www.ruby-forum.com/t/marshalling-and-serialiing-to-io-problem/139654/2 "2008-06-05T21:51:54Z")

</div>

On 05.06.2008 20:34, Junkone wrote:

> =\> “kew”  
> =\> #\<File:c:\temp\log\>  
> 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)}  
=\> #\<File:foo (closed)\>

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)}  
=\> #\<File:foo (closed)\>  
irb(main):010:0\> File.open(“foo”, File::RDONLY | File::BINARY) {|io|  
Marshal.load io}  
=\> {1=\>2}

Cheers

robert
