2015-12-05 5 views
5

base64でエンコードしたときのサイズを知っていれば、データのサイズを計算することはできますか?ベースファイルが450KBでエンコードされている場合は、どのファイルサイズですか?

base64でエンコードされたファイルのサイズは450KBですが、どのサイズが圧縮解除されていますか?

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

答えて

13

base64でエンコードされたファイルのサイズは450KBですが、どのサイズが圧縮解除されていますか?

実際、「解凍」しないとデコードします。結果は符号化されたデータよりも小さくなります。

ベース64符号化(3を格納するか、4バイト)は、元データの各6ビットのため〜8ビットを必要とするように、数学は単純である:

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

のBase64とデコードされた文字列の間のオーバーヘッドがほとんどです一定、33.33%。

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

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


:4の文字列の長さの倍数にするエンド(=)でパディングバイトは、いくつかの例を参照してください「ほぼ」という理由だけで私は言います上記の値QUJDREVGR0hJSktMTU5PUFE=を取得しましょう。

  1. エンコードされた値には24バイトあります。

  2. 結果は18

  3. のは、エンコードされた値の末尾に=秒数をカウントしてみましょうです>さんは、= 3 * 4分の24を計算してみましょう:この場合は、(私たちは、チェックするために1
    必要符号化されたデータの最後の2バイトのみ)。

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

を取得し、我々は、データを保存するために17バイトを必要としています。

+0

圧縮されていないサイズの正確なサイズをどのように計算できるのだろうか。最も近い4の乗算に切り上げ、次に3で割りますか?うーん。 – bodacydo

+0

最後のバイトを分析して= = ...を数えない限り、このようにすることはできません:4で割って3を掛け、「=」の数を引きます。 – Bacco

+0

私は理解するのが少し難しいです。いくつかの数値例を使って答えでそれを実証できるでしょうか?エンコードされた(バイト単位の)状態から、エンコードされていない状態に戻る正確な方法。 – bodacydo

1

base64は、元のサイズに約3分の1を追加するので、ファイルのサイズは、より大きくても小さくてもかまいません。

関連する問題