Sono un programmatore C++ e ho bisogno di configurare alcune comunicazioni UDP tra un'app per android java e il server C++ in esecuzione su un PC.Invio di una struttura C++ su UDP in Java
devo struttura che ho bisogno di ricevere sul PC che si compone dei seguenti elementi:
int
int
float
Purtroppo io sono totalmente in perdita quanto a come posso fare questo con Java.
Ho bisogno di creare un DatagramPacket ma il costruttore prende solo un array di byte. Ora con C++ questo sarebbe un cast facile da una struttura a un char *. Tuttavia casting come questo non è possibile con Java.
Ho creato una classe semplice che contiene i campi sopra. Sembra a posto. Il mio problema rimanente è come trasformarlo in un array di byte. Qualcuno può aiutare un noob Java su questo fronte?
Cheers!
Edit: ho creato una funzione nella classe che fa la seguente
public byte[] GetBytes() throws IOException
{
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(byteOut);
dataOut.writeInt(Integer.reverseBytes(int1));
dataOut.writeInt(Integer.reverseBytes(int2));
dataOut.writeFloat(float1);
return byteOut.toByteArray();
}
Esiste un modo migliore per fare questo?
Preferisco non utilizzare il buffer del protocollo google menzionato nella risposta di Steve perché, sebbene sia interessante, richiederebbe troppe modifiche ad altre implementazioni della piattaforma che preferirei non fare.
Sono solidale all'idea che "protobuf" sia una mazza per rompere un dado in questo caso. Tuttavia, questi requisiti hanno un modo di espandersi però - si può trovare che 'protobuf' sia giustificabile, se si prevede che la serie di dati da gestire cresca. –