Serialização de objetos - RMI

11 respostas
Heero

já trabalhei com rmi, porém agora to fazendo uma pesquisa sobre serialização de objtos em rmi. Pra falar a verdade eu não tenho ideia do que seja serialização de objetos (posso ate ter trabalhado porem sem saber o nome), fui no google achei uns conceitos q eu não entendi, aguem poderia me esplicar ? me explicar o q eh serialização de objeto e serialização de objeto em RMI? alguem sabe de material sobre Serialização de Objetos em Rmi (q não seja procurar no google, pois as vezes vcs tem um material legal, e eu não possa conseguir achar no google)???

Agradeço desde já!!!

Obrigado.

11 Respostas

aborges

http://www.oreilly.com/catalog/javarmi/chapter/ch10.html

pcalcado

Serializar é transformar um objeto em um stream (fluxo) de bytes.

Se você trabalhou com RMI, usou seriazliação para passar objetos pela rede.

[]s

Jair_Rillo_Junior

só para deixar em uma linguagem de “alto nível”, quando você serializa um Objeto, seus dados na memória ficam armazenados em sequência, assim podendo transportá-lo pela rede, persistir em HD, etc etc etc

T

Uma forma legal de você enxergar o que ocorre na serialização de objetos é escrever um programa bastante simples que serialize alguns objetos para disco, e então você, usando um editor hexadecimal (como o UltraEdit em modo hexadecimal), pode ver como é que os dados dos objetos são serializados.

Algo como:

import java.io.ObjectOutputStream;
import java.io.FileOutputStream;
import java.io.Serializable;

class MeuObjeto implements Serializable {
    public String s;
    public int x;
}

class Test140 {
    public static void main(String[] args) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream ("teste.bin"));
        MeuObjeto obj = new MeuObjeto();
        obj.s = "teste";
        obj.x = 0xCAFEBABE;
        oos.writeObject (obj);
        oos.close();
    }
}

Se você rodar este programa, vai obter um arquivo teste.bin com o seguinte conteúdo (se olharmos com um editor hexadecimal):
AC ED 00 05 73 72 00 09 4D 65 75 4F 62 6A 65 74 .í..sr..MeuObjet
6F AC 3F 96 29 BC 7B 2B A7 02 00 02 49 00 01 78 o.?.).{+....I..x
4C 00 01 73 74 00 12 4C 6A 61 76 61 2F 6C 61 6E L..st..Ljava/lan
67 2F 53 74 72 69 6E 67 3B 78 70 CA FE BA BE 74 g/String;xp.þ..t
00 05 74 65 73 74 65 ..teste

Procure no arquivo acima o inteiro "CAFEBABE" e a string "teste". O resto é informação de tipos (veja um "Ljava/lang/String;" acima, assim como um "MeuObjeto"), de comprimento e mais algumas coisas que são necessárias para recriar o objeto a partir de seus dados.

iSoron

Isso é bom pra guardar objetos em bancos de dados não orientados a objetos. Nunca testei na prática, mas deve funcionar. :stuck_out_tongue:

pcalcado

Se for para armazenar seus dados no objeto, é melhor guardar em um arquivo no disco.

Se for para usar serialização para persistir objetos, dê uma olhada no Prevayler.

[]s

velo

“pcalcado”:

Se for para usar serialização para persistir objetos, dê uma olhada no Prevayler.

[]s

Por falar em Prevayler…

Tava lendo sobre ele. Pelo que entendi é um banco de objetos… MUUUUUITO rapido, e roda somenta na RAM, sem HD.

Agora, imaginem aquele aplicativozinho, pro zé da esquina, um programa pra gerenciar uma locadora de filme :P. O cara não deixa um pc de servidor, eh soh aquele, chega final do dia desliga, possivelmente da tomada direto. O Prevayler pode ser usado numa situação dessas?

VELO

pcalcado

Depende do que você chama de banco. É um mecanismo de persistência, para facilitar. Existem mecanismos de persistência com arquivos texto, csv, xml, sgbd…

Sim. Procure sobre isso no fórum e você vai achar um milhão de tópicos.

[]s

VELO[/quote]

Jair_Rillo_Junior

Velo
O Prevayler mantém os objetos em RAM, mas ele também os salva em disco, seja em formato binário (default) ou XML (implementado na versão 2 do prevayler).
O prevayler é mais rápido a nível de consulta que os banco de dados pois seus objetos estão todos em RAM, mas também é limitado pela quantidade de ram da sua máquina (lembrando que RAM hoje em dia está mais barato que a um tempo atrás).
O prevayler não é considerado um banco de dados, pois além de gravar as informações, um banco de dados possui controle de acesso, compartilhamento, integridade referencia, interface SQL, etc etc etc.
Como o pcalçado disse, dê uma procura no fórum que já foi bastante comentado sobre o prevayler aqui

T

para que serve aquele int ? e alias…nao teria que ser um long?
o eclipse sempre reclama que eu nao declarei esse id long serializable…ou alguma coisa parecida…agora que eu quero lembra exatamente nenhuma classe ta reclamando isso :lol:

cada classe(objeto) que eu vou guardar tem que ter esse id diferente?

under_fire

heheh o serialuid é para prevenir contra possiveis conflitos…

Criado 27 de outubro de 2004
Ultima resposta 9 de mar. de 2009
Respostas 11
Participantes 9