Base64:空间使用量增幅最大的是什么?

Bry*_*eld 156 base64 expansion

如果服务器收到base64字符串并希望在转换之前检查它的长度,那么它说它总是允许最终字节数组为16KB.转换为Base64字符串时,可能会有多大的16KB字节数组(假设每个字符一个字节)?

R. *_*des 228

Base64将每组三个字节编码为四个字节.此外,输出填充为总是四的倍数.

这意味着大小为n的字符串的base-64表示的大小为:

ceil(n / 3) * 4
Run Code Online (Sandbox Code Playgroud)

因此,对于16kB阵列,base-64表示将是ceil(16*1024/3)*4 = 21848字节长〜= 21.8kB.

一个粗略的近似值将是该数据的尺寸增大到原来的4/3.

  • 我想更简单的方法是添加1/3的原始尺寸. (5认同)
  • 在您提出的示例中,以相同的测量顺序显示结果会稍微提高答案的质量(21,3 KB 而不是 21848 字节)。 (2认同)

Bin*_*ier 33

来自维基百科

注意,给定n个字节的输入,输出将是(n + 2 - ((n + 2)%3))/ 3*4字节长,因此每个输入字节的输出字节数收敛到4/3或大于1.33333.

因此,确切地说,16kb*4/3对21.3'kb或21848字节的贡献非常小.

希望这可以帮助


Chr*_*ald 11

16kb是131,072位.Base64将24位缓冲区分成4个6位字符,因此您将拥有5,462*4 = 21,848字节.


Zso*_*Sky 5

由于问题是关于可能的最大增加,我必须补充说,每80个字符左右通常有换行符.这意味着如果您将base64编码数据保存到Windows上的文本文件中,它将添加2个字节,每行Linux 1个字节.

上面已经描述了实际编码的增加.

  • 1个源字节变为4个base64字节是不是极端情况,所以增加4倍?任何更长的源材料都会获得更好的比例,直到其他人说,它渐渐接近1.333 ...... (3认同)