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

Posted

技术标签:

【中文标题】如果数据是 450KB base64 编码,那么文件大小是多少?【英文标题】:What file size is data if it's 450KB base64 encoded? 【发布时间】:2015-12-05 18:09:39 【问题描述】:

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

我有一个使用 base64 编码的文件大小为 450KB,但解压缩后的大小是多少?

有没有不先解压文件就可以找到输出大小的方法?

【问题讨论】:

【参考方案1】:

我有一个在 base64 编码时大小为 450KB 的文件,但它解压缩后的大小是多少?

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

由于 Base 64 编码对于每 6 位原始数据(或 4 个字节来存储 3 个)需要 ~ 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=

    编码值有24个字节。

    让我们计算 24 / 4 * 3 => 结果是 18。

    让我们计算编码值末尾的=s 的数量:在这种情况下,1 (我们只需要检查编码数据的最后 2 个字节)。

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

所以,我们需要 17 个字节来存储数据。

【讨论】:

我想知道如何计算未压缩大小的精确大小。向上舍入到最接近的数字 4 乘法,然后除以 3?嗯,没有。 你不能,除非你分析最后一个字节来计算 = ... 这样:除以 4,乘以 3,然后减去“=”的数量。 这对我来说有点难以理解。你能用一些数字例子在你的答案中证明它吗?从编码(以字节为单位)回到未编码的精确方式。 @bodacydo 已添加到答案中,希望对您有所帮助。 简而言之:origBytes = base64Bytes * 3 / 4 - numEqualChars【参考方案2】:

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

【讨论】:

以上是关于如果数据是 450KB base64 编码,那么文件大小是多少?的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章彻底弄懂Base64编码原理

Base64和Base64Url

如何将base64编码转变为图片

base64用法和使用场景

base64编码是啥意思啊?

base64