Serialização de objetos

A linguagem Java possui a habilidade de serializar objetos, permitindo que você os armazene em algum lugar e depois os reconstitua quando necessário. O Ruby chama esse tipo de serialização de marshaling (empacotamento).

Escreveremos uma classe básica (p051gamecharacters.rb) apenas para testar o marshaling.

 1   # p051gamecharacters.rb
 2   class PersonagemDoJogo
 3     def initialize(poder, tipo, armas)
 4       @poder = poder
 5       @tipo = tipo
 6       @armas = armas
 7     end
 8     attr_reader :poder, :tipo, :armas
 9   end

O programa p052dumpgc.rb cria um objeto da classe acima e então usa Marshal.dump para salvar a versão serializada dele no disco.

 1   # p052dumpgc.rb
 2   require 'p051gamecharacters'
 3   gc =  PersonagemDoJogo.new(120, 'Mago', [magias, 'invisibilidade'])
 4   puts gc.poder.to_s + ' ' + gc.tipo + ' '
 5   gc.armas.each do |w|
 6     puts w + ' '
 7   end
 8 
 9   File.open('jogo', 'w+') do |f|
10     Marshal.dump(gc, f)
11   end

O programa p053loadgc.rb usa Marshal.load para lê-lo.

 1   # p053loadgc.rb
 2   require 'p051gamecharacters'
 3   File.open('joho') do |f|
 4     @gc = Marshal.load(f)
 5   end
 6 
 7   puts @gc.poder.to_s + ' ' + @gc.tipo + ' '
 8   @gc.armas.each do |w|
 9     puts w + ' '
10   end

Marshal apenas serializa estruturas de dados. Ele não pode serializar código Ruby (como objetos do tipo Proc), ou recursos alocados por outros processos (como tratadores de arquivo ou conexões com bancos de dados). Marshal apenas lhe dará um erro quando tentar serializar um arquivo.

Logo do Guru-SP

Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.

Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto

Voltar para o índice