Como enviar um objeto por datagrama?

entao… to fazendo um trabalho que eu uso conexao udp…
procurei na net e em varios sites encontrei sobre como usar a classe serializable para enviar um objeto por socket, mas usando ObjectOutputStream, soh q isso usando socket por tcp…

tem como eu transformar um objeto de dados em um vetor de bytes??

alguem ai poderia da uma luz de como eu faria isso??

obrigado ae…

Se usar conexões UDP, lembre-se de mandar sempre objetos muito PEQUENOS, porque você não pode mandar pacotes muito grandes UDP (tipicamente o máximo é 1KB).

import java.io.*;
import java.util.*;

// Note que quando você for mandar algo via UDP, tem de ser sempre algo
// muito pequeno. 

class MiniObjeto implements Serializable {
    public int id;
    public double valor;
    public float[] dados;
    public MiniObjeto (int id, double valor, float[] dados) {
        this.id = id; this.valor = valor; this.dados = dados;
    }
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append (String.format ("id = %05d; valor = %7.2f%n", id, valor));
        for (float dado : dados) {
            sb.append (String.format ("dado = %7.2f%n", dado));
        }
        return sb.toString();
    }
}

class TesteSerializacao {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream (baos);
        oos.writeObject (new MiniObjeto (25, Math.PI, new float[] { 123.45f, 567.884f, 334.899f }));
        oos.close();
        byte[] bytes = baos.toByteArray();
        System.out.printf ("O MiniObjeto foi serializado com %d bytes%n", bytes.length);
        // Agora vamos ler o valor de volta
        ByteArrayInputStream bais = new ByteArrayInputStream (bytes);
        ObjectInputStream ois = new ObjectInputStream (bais);
        MiniObjeto meuObjeto = (MiniObjeto) ois.readObject ();
        ois.close();
        System.out.printf ("O objeto lido a partir dos bytes tem o valor [%s]%n", meuObjeto.toString());
    }
}       

cara… mto obrigado… funcionou perfeitamente…

qnt ao q eu vou passar por udp eh bem pequeno sim, é apenas 4 floats e um vetor com 6 booleans…

Se for algo que tem um layout fixo e que pode ser usado por um programa escrito em outra linguagem, use DataInputStream / DataOutputStream em vez de ObjectInputStream / ObjectOutputStream.
A vantagem é que você pode escrever uma classe que faça mais ou menos a mesma coisa que essas DataInput/OutputStream em várias outras linguagens (C++, Delphi, C#, VB.NET etc) sem ter de amarrar seu sistema ao Java nas duas pontas (que é o que ocorre quando se usa ObjectInput/OutputStream.)