2012-07-25 12 views
5

Ho molti dati (formato testo) da inviare da un dispositivo. Ovviamente significa che dovrei comprimerlo. Ma la mia domanda è se ci sono modi per farlo diverso dall'algoritmo di zip (like this). La ragione per cui sto facendo questa domanda è oltre here - per un file di testo che 7-zip è due volte (!) Meglio di zip. Che è un guadagno significativo E forse ci sono anche algoritmi migliori.Compressione dei dati su Android (diverso da java.util.zip?)

Quindi ci sono modi efficaci di compressione dei dati (meglio di zip) disponibili per Android?

+1

Due volte buono ... beh, questo è certamente un problema. Diversi algoritmi di compressione sono migliori di altri, specialmente con determinati tipi di compressione dei dati, ma questa non è l'unica considerazione. Standardizzazione, ingombro dei brevetti e velocità sono molto importanti. –

+0

Una ricerca rapida sembra indicare che le tue scelte facili sono Zip e Gzip. –

+0

zip e gzip utilizzano lo stesso algoritmo di compressione, solo diverse intestazioni e rimorchi rispetto allo zip. Quindi potresti risparmiare pochi byte su intestazioni e trailer usando il formato gzip e qualche altro byte se usi il formato zlib. Ma niente di sostanziale come si otterrebbe con algoritmi di compressione più avanzati che richiedono più tempo e più memoria. I dati di –

risposta

6

È necessario compilare un'altra libreria nel codice, poiché dubito che algoritmi di compressione diversi da zlib siano disponibili come parte delle librerie standard su Android.

L'algoritmo a 7 zip a cui si fa riferimento è in realtà chiamato LZMA, che è possibile ottenere in formato libreria nello LZMA SDK. Il codice sorgente è disponibile sia in Java che in C. Se è possibile collegare il codice C all'applicazione, sarebbe preferibile per la velocità.

Dato che non esiste un pranzo gratis, la velocità è importante. LZMA richiederà molta più memoria e molto più tempo di esecuzione per ottenere una compressione migliore. Dovresti sperimentare con LZMA e zlib sui tuoi dati per vedere dove vorresti che il compromesso cada tra il tempo di esecuzione e la compressione, sia per scegliere un pacchetto che per selezionare i livelli di compressione all'interno di un pacchetto.

Se si ritiene che si desideri andare dall'altra parte, a una compressione inferiore e ad una velocità superiore rispetto a zlib, è possibile consultare lz4.

-1

La tua domanda è troppo generica.

È possibile utilizzare qualsiasi libreria, purché sia ​​in Java o C/C++ (tramite NDK). Se non si desidera utilizzare librerie esterne, è necessario attenersi a ciò che si trova nell'SDK. A seconda di come stai inviando i dati, potrebbero esserci modi standard per farlo. Ad esempio, HTTP utilizza gzip e ha le intestazioni necessarie già definite.

In breve, prova diverse cose con il formato e le dimensioni dei dati previsti, trova quello migliore e integralo nella tua app.

+0

vengono inviati tramite protocollo personalizzato, quindi non utilizzerò HTTP. Potresti per favore darmi un suggerimento su una buona lib di compressione java? Non ne ho mai usato davvero nessuno. – alex

+0

I miei due :) I JDK sono stati sufficienti per me. Invece di sceglierne uno casuale, trovane alcuni e testali con i tuoi dati. –

Problemi correlati