Protocolo de comunicación entre distintas plataformas

Actualmente tengo una aplicación que se comunica entre un cliente (celular con j2me) y un servlet.
Los datos que transmito son primitivos, cadenas y contenido multimedia (array de bytes)

Para enviar los datos desde el cliente (celular) lo hago a través de un DataOutputStream, de acuerdo al tipo de dato es el método que utilizo. Por ejemplo: para escribir una cadena lo hago con writeUTF("cadena"), mientras que para escribir un int lo hago con writeInt(entero);
En el mismo orden que escribí los datos en el celular, los leo en el servlet a través de un DataInputStream, readUTF(), readInt().
De la misma manera envío de vuelta datos desde el servlet (escribe a un dataoutputstream) hacia el cliente (le de un datainputstream en el mismo orden que los datos fueron escritos)

¿Qué sucede con la transmisión de datos si el cliente ya no fuera a ser escrito en java j2me; sino en otra plataforma, por ejemplo un iphone, o una aplicación escrita en Symbian, Android, o una terminal escrita en ensamblador?

Me preocupa que los tipos de datos no sean compatibles entre distintas plataformas, por ejemplo que escribir un entero en symbian no sea lo mismo leerlo en java, lo mismo para una cadena, tal vez por los tamaños del tipo de dato o por otras cuestiones que no conozco:

=================================================
Cliente (Symbian)..................................................Servidor(Java)
writeInt()...............................................................readInt()
=================================================
Cliente (Objetive-c).................................................Servidor(Java)
writeString()............................................................readUTF()
=================================================

Debería yo cambiar la forma en la que transmito los datos por una gran cadena separada por delimitadores y luego descomponerla y consumirla (y convertir las imágenes a base64) ? O es correcto lo que estoy haciendo y es mejor entender cómo lee/escribe los distintos tipos de dato java para después transportarlo a otras plataformas?

Qué me recomiendan ustedes?
Muchas gracias por su amable atención

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

opciones

Es mejor si utilizas un formato de datos que no sea nativo de tu plataforma actual. En el futuro puede ser que no descontinúes JavaME pero si luego quieres agregar algo nuevo (como mencionaste, iOS, Android, Windows Phone, etc) vas a tener problemas con esos clientes.

También puede darse el caso del otro lado; que la aplicación cliente siga en JavaME pero por una u otra razón decidan migrar de JEE a otra cosa en el servidor.

Revisa protobuf (Google Protocol Buffers) o Thrift, son buenas opciones para comunicación entre plataformas.

Protobuf

Muchas gracias, revisaré protobuf como me indicas.
Como otra opción, crees que sea buena utilizar json como formato de transmisión de textos y el contenido multimedia lo codifique a base64?

Imagen de ezamudio

si eres rico si

Si no te importa gastar en GPRS, puedes usar JSON y codificar multimedia a base64, o incluso a hexadecimal, para usar dos caracteres por cada byte. Pero si no tienes acciones en Telcel ni eres pariente de Slim, pues mejor usa un formato binario más compacto (tal vez BSON, la versión binaria de JSON) y el contenido multimedia transmítelo como va, no entiendo para qué mandarlo como texto.

Gracias

jajajaja, ok !

Imagen de beto.bateria

JSON, XML, Web Services, son

JSON, XML, Web Services, son las opciones que tienes.