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??
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).
importjava.io.*;importjava.util.*;// Note que quando você for mandar algo via UDP, tem de ser sempre algo// muito pequeno. classMiniObjetoimplementsSerializable{publicintid;publicdoublevalor;publicfloat[]dados;publicMiniObjeto(intid,doublevalor,float[]dados){this.id=id;this.valor=valor;this.dados=dados;}publicStringtoString(){StringBuildersb=newStringBuilder();sb.append(String.format("id = %05d; valor = %7.2f%n",id,valor));for(floatdado:dados){sb.append(String.format("dado = %7.2f%n",dado));}returnsb.toString();}}classTesteSerializacao{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{ByteArrayOutputStreambaos=newByteArrayOutputStream();ObjectOutputStreamoos=newObjectOutputStream(baos);oos.writeObject(newMiniObjeto(25,Math.PI,newfloat[]{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 voltaByteArrayInputStreambais=newByteArrayInputStream(bytes);ObjectInputStreamois=newObjectInputStream(bais);MiniObjetomeuObjeto=(MiniObjeto)ois.readObject();ois.close();System.out.printf("O objeto lido a partir dos bytes tem o valor [%s]%n",meuObjeto.toString());}}
M
mateusb
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…
T
thingol
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.)