Problema com serialização de objetos

1 resposta
E
Olá pessoal, preciso enviar um objeto através de socket udp. O problema está na hora de deserializar na hora de receber o objeto. A função funciona quando não tem objeto dentro de objeto; ex: só variaveis primitivas na classe. Alguem sabeh o que é?
private static byte[] serialize(Object msg) {
        byte[] serializedMessage = null;
        try {
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            ObjectOutputStream out = new ObjectOutputStream(bout);
            out.writeObject(msg);
            serializedMessage = bout.toByteArray();
        } catch (java.io.IOException e2) {
            System.out.println("Erro ao tentar serializar mensagem.");
            System.exit(1);
        }
        return serializedMessage;
    }

    private static Object unserialize(byte[] msg) {
        Object unSerializedMessage = null;
        try {
            ByteArrayInputStream bin = new ByteArrayInputStream(msg);
            ObjectInputStream in = new ObjectInputStream(bin);
            unSerializedMessage = (Object) in.readObject();
        } catch (java.io.IOException e1) {
            
            System.out.println("Erro na desserialização de uma mensagem.");
            System.exit(1);
        } catch (java.lang.ClassNotFoundException e2) {
            System.out.println("Erro na desserialização: classe inexiste.");
            System.exit(1);
        }
        return unSerializedMessage;
    }
Classes que estou serializando:
public class PacoteGeral implements Serializable {

   //PacoteEnviado pacotes;
   boolean hasWinner;
   PacoteEnviado geral;
  
    public PacoteGeral() {
       // pacotes = new PacoteEnviado();
      
        hasWinner=false;
      
    }

}

public class PacoteEnviado implements Serializable {

   
    int direcao;
    boolean jump;
    String Mensagem;
// depois eh so get e sets
A parte de comunicação:
// enviando
 PacoteGeral geral= new PacoteGeral();
                geral.geral= new PacoteEnviado();
                geral.hasWinner=true;
                

                  //System.out.println("antes "+geral.pacotes.get(0).direcao +" " +geral.pacotes.get(1).direcao );

                buf=serialize(geral);
 InetAddress address = packet.getAddress();// esse packet eh recebido la em cima ...ta certo
                int port = packet.getPort();
                packet = new DatagramPacket(buf, buf.length, address, port);
                socket.send(packet);


// recebendo
 packet = new DatagramPacket(buf, buf.length);
        socket.receive(packet);

        Object o = unserialize(packet.getData());
        PacoteGeral geral = (PacoteGeral) o;

        System.out.println(geral.hasWinner );

Espero ajuda

1 Resposta

E

Esqueci, o erro que esta dando. Ta disparando a excessao de erro de deserializacao na funcao unserialize. Quando testo a funcao sem mandar pela rede funciona.Agora quando mando pela rede que da o erro.

Criado 8 de novembro de 2010
Ultima resposta 8 de nov. de 2010
Respostas 1
Participantes 1