Soy un programador C++ y necesito configurar algunas comunicaciones UDP entre una aplicación java de Android y el servidor C++ que se ejecuta en una PC.Enviando una estructura C++ sobre UDP en Java
que tienen estructura que necesito para recibir en el PC que consiste en lo siguiente:
int
int
float
Desafortunadamente estoy totalmente en una pérdida en cuanto a cómo puedo hacer esto con Java.
Necesito crear un DatagramPacket pero el constructor solo toma una matriz de bytes. Ahora con C++ esto sería un lanzamiento fácil desde una estructura a un char *. Sin embargo, lanzar de esta manera no es posible con Java.
He creado una clase simple que tiene los campos anteriores. Eso parece estar bien. Mi problema restante es cómo convertir eso en una matriz de bytes. ¿Alguien puede ayudar a un novato de Java en este frente?
¡Salud!
Edición: He creado una función en la clase que hace lo siguiente
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();
}
¿Hay una mejor manera de hacer esto?
Prefiero no usar el búfer de protocolo de Google mencionado en la respuesta de Steve porque, si bien es interesante, requeriría demasiados cambios en otras implementaciones de plataforma que preferiría no hacer.
Soy comprensivo con la idea de que 'protobuf' sea una maza para romper una nuez en este caso. Sin embargo, estos requisitos tienen una forma de expandirse: es posible que 'protobuf' sea justificable si se espera que crezca el conjunto de datos que debe manejar. –