Serializando Objetos

Java es capaz de serializar objetos: puede almacenarlos, para luego reutilizarlos cuando sea necesario. Ruby tiene también esta capacidad, pero la llama **marshaling.

Veamos un ejemplo en el que a partir de una clase, creamos una serie de objetos que almacenamos y luego recuperamos:

  • La clase

personaje.rb

class Personaje
  def initialize(vida, tipo, armas)
    @vida = vida
    @tipo = tipo
    @armas = armas
  end
  attr_reader :vida, :tipo, :armas
end
  • Creamos los objetos y los guardamos en un fichero usando Marshal.dump:
require 'personaje'
p1 = Personaje.new(120, 'Mago', ['hechizos', 'invisibilidad'])
puts p1.vida.to_s+' '+ p1.tipo+' '
p1.armas.each do |w|
  puts w + ' '
end
 
File.open('juego', 'w+') do |f|
  Marshal.dump(p1, f)
end
  • Usamos Marshal.load para recuperarlos:
require 'personaje'
File.open('juego') do |f|
  @p1 = Marshal.load(f)
end
 
puts @p1.vida.to_s + ' ' + @p1.tipo + ' '
@p1.armas.each do |w|
  puts w + ' '
end

Marshal únicamente serializa estructuras de datos; no puede serializar código (como hacen los objetos Proc), o recursos utilizados por otros procesos (como conexiones a bases de datos). Marshal da un error cuando se intenta serializar un fichero.

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution 3.0 License