Base64编码的空间开销是多少?

从电子邮件(MIME)到Web(HTML / CSS / JavaScript)的许多Internet格式都是纯文本的。如果您通过电子邮件发送图像或可执行文件,则通常首先使用base64进行编码。base64编码背后的技巧是我们使用64种不同的ASCII字符,包括所有字母,大写和小写以及所有数字。

并非所有非文本文档都使用base64编码在线共享。但是,这很常见。加载google.com或bing.com并查看HTML源代码:您将使用base64编码的图像。

Base64显然是浪费,因为我们每个字节只使用64个不同的值,而一个字节可以代表256个不同的字符。也就是说,我们使用字节(8位字)作为6位字。每8位传输数据浪费2位。要发送三个字节的信息(3次8是24位),你需要使用四个字节(4次6再次是24位)。因此,文件的base64版本比它可能大4/3。所以我们使用的存储空间比我们多33%。

听起来很糟糕。工程师如何容忍这种浪费的格式?

Web服务器通常以压缩形式提供内容。压缩部分抵消了base64的浪费性质。

为了评估base64编码的效果,我选择了最近一篇研究论文中使用的一组图像。有不同的压缩格式,但旧的格式是gzip。我使用base64对图像进行编码,然后使用gzip压缩它们。我报告了字节数。我让文件可用。

文件名 原文件大小 Base64文件大小 Base64文件gzip后大小
bing.png 1355 1832 1444
googlelogo.png 2357 3186 2477
lena_color_512.jpg 105764 142876 108531
mandril_color.jpg 247222 333970 253868
peppers_color.jpg 9478 12807 9798

如您所见,gzip大小在原始大小的5%之内。对于较大的文件,差异接近2.5%。

因此,您可以安全地在Web上使用base64而不必过于担心。

在某些情况下,base64编码甚至可以提高性能,因为它避免了对不同服务器请求的需要。在其他情况下,base64会使事情变得更糟,因为它往往会破坏浏览器和服务器缓存。隐私方面,base64编码可以带来好处,因为它隐藏了您在较大的加密包中访问的内容。

posted @ 2019-08-27 12:57  小莽  阅读(1927)  评论(0编辑  收藏  举报