2012-07-25 13 views
5

Tengo una gran cantidad de datos (formato de texto) para enviar desde un dispositivo. Obviamente significa que debería comprimirlo. Pero mi pregunta es si hay alguna otra forma de hacerlo que no sea el algoritmo zip (like this). La razón por la que hago esta pregunta es más de here - para un archivo de texto, es decir, 7-zip es dos veces (¡) mejor que zip. Lo cual es una ganancia significativa. Y tal vez hay incluso mejores algoritmos.Compresión de datos en Android (que no sea java.util.zip?)

¿Hay alguna manera efectiva de compresión de datos (mejor que zip) disponible para Android?

+1

El doble de bueno ... bueno, eso sin duda es un problema. Los diferentes algoritmos de compresión son mejores que otros, especialmente con ciertos tipos de compresión de datos, pero esta no es la única consideración. La estandarización, los gravámenes a la patente y la velocidad son muy importantes. –

+0

Una búsqueda rápida parece indicar que sus opciones fáciles son Zip y Gzip. –

+0

zip y gzip usan el mismo algoritmo de compresión, solo diferentes encabezados y trailers que zip. Por lo tanto, puede guardar algunos bytes en encabezados y trailers utilizando el formato gzip y algunos bytes más si usa el formato zlib. Pero nada sustancial como lo haría con los algoritmos de compresión más avanzados que requieren más tiempo y más memoria. –

Respuesta

6

Necesitaría compilar otra biblioteca en su código, ya que dudo que los algoritmos de compresión que no sean zlib estén disponibles como parte de las bibliotecas estándar en Android.

El algoritmo de 7-zip al que se refiere en realidad se llama LZMA, que se puede obtener en forma de biblioteca en el LZMA SDK. El código fuente está disponible tanto en Java como en C. Si puede vincular el código C en su aplicación, sería preferible para la velocidad.

Como no existe el almuerzo gratis, la velocidad es importante. LZMA requerirá mucha más memoria y mucho más tiempo de ejecución para lograr una compresión mejorada. Debe experimentar con LZMA y zlib en sus datos para ver dónde le gustaría que la compensación se reduzca entre el tiempo de ejecución y la compresión, tanto para elegir un paquete como para elegir niveles de compresión dentro de un paquete.

Si le parece que quiere ir por el otro lado, a una menor compresión y una velocidad aún mayor que zlib, puede consultar lz4.

-1

Su pregunta es muy general.

Puede usar cualquier biblioteca, siempre que esté en Java o C/C++ (a través del NDK). Si no desea utilizar bibliotecas externas, debe apegarse a lo que contiene el SDK. Dependiendo de cómo envíe los datos, puede haber formas estándar de hacerlo. Por ejemplo, HTTP usa gzip y tiene los encabezados necesarios ya definidos.

En resumen, pruebe diferentes cosas con su formato y tamaño de datos esperados, encuentre la mejor e intégrela en su aplicación.

+0

datos se envían a través del protocolo personalizado, por lo que no utilizaré HTTP. ¿Podrías darme una pista sobre una buena lib de compresión java? Realmente nunca he usado ninguno. – alex

+0

Mi cualquiera :) Los JDK han sido suficientes para mí. En lugar de simplemente elegir uno al azar, encuentre algunos y pruébelos con sus datos. –

Cuestiones relacionadas