Est-il possible de calculer la taille des données si je connais leur taille quand elles sont encodées en base64?
J'ai un fichier d'une taille de 450 Ko lorsqu'il est encodé en base64, mais de quelle taille est-il décompressé?
Existe-t-il une méthode pour trouver la taille de sortie sans décompresser le fichier au préalable?
J'ai un fichier d'une taille de 450 Ko lorsqu'il est encodé en base64, mais de quelle taille est-il décompressé?
En fait, vous ne "décompressez" pas, vous décodez. Le résultat sera plus petit que les données encodées.
Comme le codage Base 64 nécessite ~ 8 bits pour chaque 6 bits des données d'origine (ou 4 octets pour en stocker 3), le calcul est simple:
Encoded Decoded
450KB / 4 * 3 = ~ 337KB
La surcharge entre Base64 et chaîne décodée est presque constante, 33,33%. Je dis "presque" juste parce que les octets de remplissage à la fin (=
) qui rendent la longueur de chaîne multiple de 4. Voir quelques exemples:
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% ...
Calcul de l'espace pour les données non codées:
Obtenons la valeur QUJDREVGR0hJSktMTU5PUFE=
mentionné ci-dessus.
Il y a 24 octets dans la valeur codée.
Calculons 24/4 * 3 => le résultat est 18.
Comptons le nombre de =
s à la fin de la valeur codée: dans ce cas, 1
(nous devons vérifier uniquement les 2 derniers octets de données codées).
Obtenir 18 (obtenu à l'étape 2) - 1 (obtenu à l'étape 3), nous obtenons 17
Nous avons donc besoin de 17 octets pour stocker les données.
base64 ajoute environ un tiers à la taille d'origine, donc votre fichier doit avoir une taille plus ou moins 0,75 * 450 Ko.