web-dev-qa-db-ja.com

450KBのbase64エンコードの場合、データのファイルサイズはどのくらいですか?

Base64エンコードされたときにデータのサイズがわかっている場合、データのサイズを計算することはできますか?

Base64でエンコードしたときのサイズが450KBのファイルがありますが、解凍するとどのサイズになりますか?

最初にファイルを解凍せずに出力サイズを見つける方法はありますか?

19
bodacydo

Base64でエンコードしたときのサイズが450KBのファイルがありますが、解凍するとどのサイズになりますか?

実際、「解凍」するのではなく、デコードします。結果は、エンコードされたデータよりも小さくなります。

Base 64エンコードでは、元のデータの6ビット(または3を格納するために4バイト)ごとに〜8ビットが必要なので、計算は簡単です。

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

Base64とデコードされた文字列間のオーバーヘッドはほぼ一定で、33.33%です。文字列の長さが4の倍数になるように末尾のパディングバイト(=)を埋め込んだだけで、「ほぼ」と言います。いくつかの例を参照してください。

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


エンコードされていないデータのスペースの計算:

上記の値QUJDREVGR0hJSktMTU5PUFE=を取得しましょう。

  1. エンコードされた値は24バイトです。

  2. 24/4 * 3 =>結果は18になります。

  3. エンコードされた値の最後の=sの数を数えます:この場合、1
    (エンコードされたデータの最後の2バイトのみを確認する必要があります)。

  4. 18を取得(ステップ2で取得)-1(ステップ3で取得)17を取得

したがって、データを格納するには17バイトが必要です。

39
Bacco

base64では、元のサイズの約3分の1が追加されるため、ファイルのサイズは.75 * 450kb程度になるはずです。

3
Tibor