web-dev-qa-db-fra.com

Quelle est la taille du fichier de données s'il est encodé en base64 à 450 Ko?

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?

19
bodacydo

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.

  1. Il y a 24 octets dans la valeur codée.

  2. Calculons 24/4 * 3 => le résultat est 18.

  3. 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).

  4. 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.

39
Bacco

base64 ajoute environ un tiers à la taille d'origine, donc votre fichier doit avoir une taille plus ou moins 0,75 * 450 Ko.

3
Tibor