Estoy buscando un mecanismo para serializar los datos que se pasarán a través de un socket o memoria compartida en un mecanismo independiente del idioma. Soy reacio a usar XML ya que estos datos van a estar muy estructurados, y la velocidad de codificación/descodificación es vital. Tener una buena API C que tenga una licencia generosa es importante, pero idealmente debería haber soporte para una tonelada de otros idiomas. Miré google's protocol buffers y ASN.1. ¿Estoy en el camino correcto? ¿Hay algo mejor? ¿Debería implementar mi propia estructura empaquetada y no buscar algún estándar?¿Cuál es la mejor manera de serializar datos en un formato binario independiente del idioma?
Respuesta
Teniendo en cuenta sus requisitos, me gustaría ir con Buffers de Protocolo de Google. Parece que es ideal para su aplicación.
El problema que tengo con Protocol Buffers es que la interfaz C es muy mala. Me estoy inclinando hacia asn1c en este momento. – bmdhacks
Cinco años más tarde, hay una serie de buenas interfaces C para los búferes de protocolo, por lo que estoy marcando esto como la respuesta correcta. – bmdhacks
Podría detallar la diferencia entre los protobuffers y XDR ... – Claudio
Salida Hessian
Usted podría considerar XDR. Tiene un RFC. Lo he usado y nunca he tenido ningún problema de rendimiento con él. Se usó en ONC RPC y tiene una y viene con una herramienta llamada rpcgen. También es fácil crear un generador usted mismo cuando solo quiere serializar los datos (que es lo que terminé haciendo por razones de portabilidad, me tomó medio día). Hay una implementación de código abierto C, pero ya puede estar en una biblioteca del sistema, por lo que no necesitaría las fuentes.
ASN.1 siempre me pareció un poco barroco, pero según sus necesidades reales podría ser más apropiado, ya que hay algunas limitaciones para XDR.
Acepto que Sun XDR funciona bien para todas las plataformas y sistemas operativos en los que lo hemos usado. –
También hay Binary XML pero parece que aún no está estabilizado. El artículo al que me enlace ofrece un grupo de enlaces que pueden ser de interés.
Otra opción es SNAC/TLV que utiliza AOL en su protocolo Oscar/AIM.
JSON es realmente mi favorito para este tipo de cosas. Sin embargo, no tengo experiencia previa con material binario. ¡Publique sus resultados si planea usar JSON!
Desafortunadamente voy a tener que descartar JSON debido a la sobrecarga de análisis. Realmente estoy buscando formatos que almacenen los datos en binario que no tienen que ser analizados. – bmdhacks
Puede sobreestimar gastos generales: el analizador JSON bien escrito es bastante eficiente; y no todos los analizadores binarios están bien escritos (lo que significa que a veces son más lentos). Entonces, primero mediría el rendimiento de las alternativas en lugar de asumir que sabes la respuesta. – StaxMan
Actualización desde mi lado: Acabo de hacer JSON con contenido binario, manualmente base64 codificando las manchas binarias. ¡Funciona bastante bien! – SchizoDuckie
Thrift es un formato binario creado por Facebook. Here's a comparison con búferes de protocolo de Google.
También echa un vistazo a Muscle. Mientras hace bastante, serializa a un formato binario.
Solo quería agregar ASN.1 a esta mezcla. ASN.1 es un estándar de formato, pero hay bibliotecas para la mayoría de los idiomas, y la interfaz C a través de asn1c es mucho más limpia que la C interface for protocol buffers.
Pocos de que debe considerar
1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards
ASN.1 Analizador es el bueno para represenations binarios la mejor parte es ASN.1 es una tecnología bien establecida que es ampliamente utilizado tanto en el UIT-T y cosa fuera de eso. La notación es compatible con varios proveedores de software.
- 1. ¿Cuál es la mejor manera de diseñar un servidor GWT "independiente de la plataforma"?
- 2. ¿Cuál es la mejor manera de migrar datos en django
- 3. ¿Cuál es la mejor manera de validar datos en mongo?
- 4. ¿Cuál es la mejor manera de serializar una matriz basada en una interfaz en WCF?
- 5. ¿Cuál es la mejor manera para que un programador se acerque a aprender un nuevo idioma?
- 6. ¿Cuál es la mejor manera de almacenar datos de tendencia?
- 7. ¿Cuál es la mejor manera de serializar una instancia de modelo EMF?
- 8. ¿Cuál es la mejor manera de serializar la configuración de la aplicación Delphi?
- 9. ¿Cuál es la mejor manera de volver a aprender un idioma?
- 10. ¿Mejor manera de descargar un archivo binario?
- 11. Código de descompilación (independiente del idioma)
- 12. ¿cuál es la mejor manera de cambiar el formato de fecha en mysql SELECT?
- 13. ¿Cuál es la mejor manera de almacenar un conjunto de Delphi en un conjunto de datos?
- 14. .Net Deep cloning: ¿cuál es la mejor manera de hacerlo?
- 15. Persistencia del objeto Delphi, ¿cuál es la mejor manera?
- 16. ¿Cuál es la mejor manera de probar un procedimiento almacenado?
- 17. ¿Cuál es la mejor manera de almacenar un valor monetario en la base de datos?
- 18. ¿Cuál es la mejor manera de serializar objetos JavaScript a XML?
- 19. ¿Cuál es la mejor manera de diferir Crystal Reports?
- 20. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
- 21. Cuál es la mejor manera de almacenar datos XML en un archivo de Excel
- 22. ¿Cuál es el mejor idioma para escribir un sistema experto?
- 23. ¿Cuál es la mejor manera de almacenar valores de fecha en formato de cadena?
- 24. ¿Cuál es la mejor manera de almacenar/recuperar datos para un escritorio sin usar una base de datos?
- 25. ¿Cuál es la mejor manera de dibujar en la consola?
- 26. ¿Cuál es la mejor manera de barajar un NSMutableArray?
- 27. ¿Cuál es la mejor manera de inicializar un frijol?
- 28. ¿Cuál es la mejor manera de devolver grandes cantidades de datos binarios de un servicio web?
- 29. ¿Cuál es la mejor manera de implementar un "temporizador"?
- 30. ¿Cuál es la mejor manera de determinar un bucle invariante?
es posible que desee ver [performant-entity-serialization-bson-vs-messagepack-vs-json] (http://stackoverflow.com/questions/6355497/performant-entity-serialization-bson-vs-messagepack-vs -json) también. – nawfal