2008-09-27 9 views
15

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?

+0

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

Respuesta

11

Teniendo en cuenta sus requisitos, me gustaría ir con Buffers de Protocolo de Google. Parece que es ideal para su aplicación.

+1

El problema que tengo con Protocol Buffers es que la interfaz C es muy mala. Me estoy inclinando hacia asn1c en este momento. – bmdhacks

+1

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

+0

Podría detallar la diferencia entre los protobuffers y XDR ... – Claudio

3

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.

+0

Acepto que Sun XDR funciona bien para todas las plataformas y sistemas operativos en los que lo hemos usado. –

1

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.

2

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!

+0

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

+0

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

+0

Actualización desde mi lado: Acabo de hacer JSON con contenido binario, manualmente base64 codificando las manchas binarias. ¡Funciona bastante bien! – SchizoDuckie

1

También echa un vistazo a Muscle. Mientras hace bastante, serializa a un formato binario.

3

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.

0

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.

Cuestiones relacionadas