如果数据是 450KB Base64 编码,那么文件大小是多少?

问题描述 投票:0回答:2

如果我知道数据的 Base64 编码大小,是否可以计算数据的大小?

我有一个经过 Base64 编码后大小为 450KB 的文件,但解压后的大小是多少?

有没有一种方法可以在不先解压文件的情况下找到输出大小?

file base64 size filesize
2个回答
53
投票

我有一个经过 Base64 编码后大小为 450KB 的文件,但解压后的大小是多少?

事实上,您不是“解压缩”,而是解码。结果将小于编码数据。

由于 Base 64 编码需要约 8 位来存储原始数据的每 6 位(或 4 个字节来存储 3 个),所以数学很简单:

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. 让我们计算一下编码值末尾的

    =
    的数量:在本例中为 1
    (我们只需要检查编码数据的最后 2 个字节)。

  4. 得到 18(在步骤 2 中获得)- 1(在步骤 3 中获得)我们得到 17

因此,我们需要 17 个字节来存储数据。

或者,正如 @kriegaex 评论的那样:

originalBytes = base64Bytes * 3 / 4 - numEqualCharsAtEnd

5
投票

base64 大约增加了原始大小的三分之一,因此您的文件大小应该或多或少为 0.75*450kb。

© www.soinside.com 2019 - 2024. All rights reserved.