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.
Ci sono 24 byte nel valore codificato.
Calcoliamo 24/4 * 3 => il risultato è 18.
Contiamo il numero di =
s sull'estremità del valore codificato: In questo caso, 1
(dobbiamo controllare solo i 2 ultimi byte di dati codificati).
Ottenere 18 (ottenuto nel passaggio 2) - 1 (ottenuto sulla fase 3) otteniamo 17
Quindi, abbiamo bisogno di 17 byte per memorizzare i dati.
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
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
È 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