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:
class Personaje
def initialize(vida, tipo, armas)
@vida = vida
@tipo = tipo
@armas = armas
end
attr_reader :vida, :tipo, :armas
end
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
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.