2011-02-12 21 views
6

¿Cuáles son los pros y los contras del buffer de protocolo (protobuf) sobre GSON?gson vs protocol buffer

¿En qué situación es más apropiado protobuf que GSON?

Lo siento por una pregunta muy genérica.

Respuesta

11

Tanto json (a través de la biblioteca gson) como protobuf son portátiles entre platorms; pero

  • protobuf es menor (ancho de banda) y más barato (CPU) para leer/escribir
  • JSON es legible/editable (protobuf es binario; difícil de analizar sin el apoyo de la biblioteca)
  • protobuf es trivial fusionar fragmentos - solo concatena
  • json se pasa fácilmente a los clientes de la página web
  • la versión principal de java de protobuf necesita la definición del contrato (.proto) y la generación de código; GSON parece permitir el uso POJO arbitraria (hay implementaciones protobuf que trabajan en este tipo de objetos, pero no para Java que yo sepa)

Si el rendimiento es clave: protubuf

Para su uso con una página web (JavaScript), o legible para humanos: json (quizás a través de gson)

+1

Apache avro es una alternativa más si está buscando la serialización binaria. La definición de contrato (como .proto) es opcional y viene con soporte RPC integrado –

+0

Apache Thrift es la contraparte de Apache de Google Protocol Buffers (http://thrift.apache.org/). Ver en línea para comaprisons detallados entre los dos. –

0

Si desea eficiencia y multiplataforma, debe enviar mensajes sin procesar entre las aplicaciones que contienen la información que es necesaria y nada más o menos.

Serializar clases a través de los propios mecanismos de Java, gson, protobufs o lo que sea, crea datos que contienen no solo la información que desea enviar, sino también información sobre las estructuras/jerarquías lógicas de las estructuras de datos que se han utilizado para representar el datos dentro de su aplicación.

Esto hace que las clases y el mapeo de datos sean de doble propósito, uno para representar los datos internamente en la aplicación, y dos para ser transmitidos a otra aplicación. Esos dos roles pueden ser conflictivos. El desarrollador tiene la responsabilidad de recordar que las clases, colecciones y el diseño de datos con el que está trabajando en cualquier momento también se serializarán.