2011-11-29 9 views
7

Se me advirtió sobre el uso de colecciones inmutables de guayaba en objetos utilizados en comunicación serializada porque si se actualizara la versión de Guava en un extremo, podría haber problemas de incompatibilidad de versiones de serialización. ¿Es esta una preocupación valida?¿Es estable la serialización de las colecciones inmutables de guayaba?

+3

Eso puede ser un problema con cualquier clase: desea que las versiones de la biblioteca sean las mismas en los lados de envío y recepción. – SteveD

Respuesta

5

Sí, eso es una preocupación válida.

Desde la página principal del proyecto de guayaba (http://code.google.com/p/guava-libraries/):

formas serializados de todos los objetos están sujetos a cambios. No los persista y suponga que pueden leerse en una versión futura de la biblioteca.

Si está utilizando la serialización nativa de Java, la guayaba no es una buena opción.

+2

No es "una buena elección" si no puede controlar qué versión se utiliza en ambos extremos de la comunicación. – SteveD

+1

Eso apesta. Las colecciones inmutables deberían ser estables por ahora. ¿Por qué cambiarían los formularios serializados? –

+1

Mantener la compatibilidad de serialización entre diferentes versiones de estructuras de datos es realmente difícil. Vea algunos de los mensajes más recientes en este [hilo de la lista de correo] (https://groups.google.com/group/guava-discuss/browse_thread/thread/eae0b4232496d2b3/020c9f58640f2263) por algunos de los motivos. –

7

Vamos a dar un poco de perspectiva.

Los usos más prominentes de serialización son:

  1. almacenamiento de datos en entre ejecuciones de la aplicación
  2. el envío de datos entre un cliente y un servidor

guayaba es totalmente bien para su aplicación 2 , si usted controla qué versión de Guava se está utilizando tanto en el cliente como en el servidor. Además, aunque Guava no garantiza la consistencia de la serialización entre las versiones de Guava ... en realidad, las formas serializadas no cambian muy a menudo.

Por otro lado, permítanme dar una perspectiva de por qué Guava no garantiza la consistencia de los formularios serializados. Cambié la forma serializada de ImmutableMultiset entre las versiones 9 y 10 de Guava, y la razón era porque necesitaba refactorizar las cosas para poder agregar ImmutableSortedMultiset a las colecciones inmutables. Puede ver el cambio usted mismo here. Tratar de hacer esta misma refactorización mientras se mantienen consistentes los formularios serializados casi con toda seguridad habría requerido hacks incómodos adicionales, los cuales están ... bastante en contra de la filosofía del equipo Guava. (Podría haber sido factible por un programador más experto que yo, pero sigo afirmando que no habría sido trivial.) Garantizar la compatibilidad de serialización a largo plazo habría requerido asombrosas cantidades de esfuerzo, como se discutió en el above linked mailing list thread, afirmó Kevin. :

tratan de mantenerse a de compatibilidad entre versiones hizo las cosas un centenar de veces más difíciles y nos dimos por vencidos en él antes de guayaba siquiera comenzado.

y Jared:

El problema de fondo sigue ahí: asegurar que las formas serializados son compatibles entre todas las versiones de guayaba. Ese era un objetivo mío cuando trabajaba para Google Collections 1.0, pero abandoné ese objetivo después de dándome cuenta de su dificultad. La implementación y prueba de la compatibilidad entre versiones no valía la pena.

Finalmente, señalaré que Guava se usa internamente en Google en todas partes y se maneja bastante bien.

Cuestiones relacionadas