2015-12-05 33 views

risposta

13

Ho un file di dimensioni di 450 KB quando codificato Base64 ma quale dimensione è decompressa?

Infatti, non si "decomprime", si decodifica. Il risultato sarà più piccolo dei dati codificati.

Come Base 64 codifica deve ~ 8 bit per ogni 6 bit dei dati originali (o 4 byte per memorizzare 3), la matematica è semplice:

Encoded   Decoded 
450KB/4 * 3 = ~ 337KB 

L'overhead tra Base64 e stringa decodificata è quasi costante, 33,33%. Dico "quasi" solo perché i byte di riempimento alla fine (=) che rendono il multiplo stringa di lunghezza 4. Vedi alcuni esempi:

String    Encoded     Len B64 Pad Space needed 
A     QQ==      1  2  2 400.00% 
AB     QUI=      2  3  1 200.00% 
ABC     QUJD      3  4  0 133.33% 
ABCD    QUJDRA==     4  6  2 200.00% 
ABCDEFGHIJKLMNOPQ QUJDREVGR0hJSktMTU5PUFE= 17 23 1 140.00% 
(300 bytes)  (400 bytes)    300 400 0 133.33% 
(500 bytes)  (668 bytes)    500 666 2 133.60% 
(5000 bytes)  (6668 bytes)   5000 6666 2 133.36% 
                ... tends to 133.33% ... 


Calcolo lo spazio per i dati non codificato:

Prendiamo il valore QUJDREVGR0hJSktMTU5PUFE= menzionato sopra.

  1. Ci sono 24 byte nel valore codificato.

  2. Calcoliamo 24/4 * 3 => il risultato è 18.

  3. Contiamo il numero di = s sull'estremità del valore codificato: In questo caso, 1
    (dobbiamo controllare solo i 2 ultimi byte di dati codificati).

  4. Ottenere 18 (ottenuto nel passaggio 2) - 1 (ottenuto sulla fase 3) otteniamo 17

Quindi, abbiamo bisogno di 17 byte per memorizzare i dati.

+0

Mi chiedo come è possibile calcolare le dimensioni precise delle dimensioni non compresse. Arrotondare al numero 4 più vicino, quindi dividere per 3? Hmm no. – bodacydo

+0

Non è possibile, a meno che non si analizzino gli ultimi byte per contare il = ... In questo modo: Dividere per 4, moltiplicare per 3 e sottrarre la quantità di "=". – Bacco

+0

È un po 'difficile per me capire. Sareste in grado di dimostrarlo nella vostra risposta con alcuni esempi numerici? Il modo preciso di passare da codificati (in byte) a non codificati. – bodacydo

1

base64 aggiunge circa un terzo alla dimensione originale, quindi il file dovrebbe essere più o meno .75 * 450kb di dimensioni.