class BioDSL::Serializer
Class for serializing and de-serializing data using Marshal.
Public Class Methods
new(io, &block)
click to toggle source
Constructor for serializer.
@param io [IO] IO object. @param block [Proc] Block context.
@raise [SerializerError] if no block given.
@return [Serializer] class instance.
# File lib/BioDSL/serializer.rb, line 45 def initialize(io, &block) @io = io fail SerializerError, 'No block given' unless block block.call(self) end
Public Instance Methods
<<(obj)
click to toggle source
Method to write serialized data using Marshal to a given IO.
@param obj [Object] Object
to serialize.
@example
File.open("foo.dat", 'wb') do |io| BioDSL::Serializer.new(io) do |s| s << {"foo": 0} s << {"bar": 1} end end
# File lib/BioDSL/serializer.rb, line 64 def <<(obj) data = Marshal.dump(obj) @io.write([data.size].pack('N')) @io.write(data) end
Also aliased as: writei
each() { |next_entry until eof?| ... }
click to toggle source
Iterator for reading and de-serialized data from a given IO.
@example
File.open("foo.dat", 'rb') do |io| BioDSL::Serializer.new(io) do |s| s.each do |record| puts record end end end
@yield [Object]
# File lib/BioDSL/serializer.rb, line 84 def each yield next_entry until @io.eof? end
next_entry()
click to toggle source
Read next entry from serialized stream.
@return [Object] Deserialized Object
.
# File lib/BioDSL/serializer.rb, line 91 def next_entry size = @io.read(4) fail EOFError unless size data = @io.read(size.unpack('N').first) Marshal.load(data) end