为什么在Base64编码中使用填充?

时间:2010-12-01 08:37:27

标签: optimization encoding base64

  

可能重复:
  Why does base64 encoding requires padding if the input length is not divisible by 3?

引用Wikipedia

  

...这些填充字符必须   在解码但是仍然被丢弃   允许计算有效   未编码文本的长度,当它的时候   输入二进制长度不是a   3个字节的倍数。 ...

但即使剥离填充字符,也可以轻松完成长度原始数据的计算。

          |               Encoded
          |--------------------------------------
Raw Size  | Total Size | Real Size | Padding Size
1         | 4          | 2         | 2
2         | 4          | 3         | 1
3         | 4          | 4         | 0
4         | 8          | 6         | 2
5         | 8          | 7         | 1
6         | 8          | 8         | 0
7         | 12         | 10        | 2
8         | 12         | 11        | 1
9         | 12         | 12        | 0
10        | 16         | 14        | 2
.
.
.

因此,考虑到实际编码大小(第三列),您始终可以正确猜出填充大小:

PaddedSize = 4 * Ceil (RealSize / 4)

所以从理论上讲,不需要填充。算法会处理它。考虑到Base64编码是一种流行的行业标准,它被用于许多应用程序和设备中。这些将受益于减少的编码大小。所以问题是,为什么在Base64编码中使用填充?

3 个答案:

答案 0 :(得分:4)

它使编码消息为4个字符的整数倍。这可能会使编写解码器更容易一些。您可以加载和处理4个块中的字符并将它们转换为3个输出字符,并且填充可以很容易地完成此操作而不会离开字符串的末尾。

答案 1 :(得分:1)

正如您所注意到的,无论消息的长度如何,最终填充的长度最多为2个字节,因此它不是一个非常重要的节省 - 更多的是微优化。如果你的应用程序既是编码的生产者也是消费者,你可以去除填充,但这不值得麻烦。

答案 2 :(得分:0)

Base64很老,来自可用内存和CPU限制的日子。 编写软件也更复杂(与80年代或90年代相比,今天的SDK和工具包 更加用户友好),而Base64必须在许多不同的系统架构上运行。

也就是说,开发人员可以假设解码Base64数据后的“真实”数据大约是 n 字节;这反过来又让他/她做了更好的记忆管理。

今天它不再重要了,但是在资源有限的那一天,这是一件好事。

更新:从未想过5年后我会得到一个downvote,但现在我可以看到我的回答问题。我猜我们都变老了。 ;)亲爱的访客,享受这个答案的一粒盐。