string - Base64 字符串中的文件比原始文件占用更多空间

标签 string

我遇到了这种...问题...我通过在 base64 字符串中对文件(图像、视频和音频)进行编码并将它们添加到字符串来将资源添加到我的程序中。我所做的是读取文件,然后将字节转换为 Base64 字符串并将其写入 txt 文件,但 txt 文件占用的空间比原始文件略多。当我将字符串添加到我的程序代码时也会发生这种情况。编译后的可执行文件占用大量空间。例如:

一个MP3文件占用2.3MB txt文件中Base64字符串占用3.19MB

有什么办法可以优化base64字符串的空间吗?

PD这只是我为了好玩而尝试做的事情。不要在“为什么”或“为什么”我想要这个的原因下面发表评论。答案是:只是为了好玩。

最佳答案

这是 Base64 固有的。

Base64 使用 4 个八位位组来编码 3 个八位位组,因为它是一种相当有效的编码任意二进制数据的方法,它只使用那些在 ASCII 中表示可打印的字节,并且还避免了许多在许多上下文中特殊的字符。它比十六进制字符串(每个八位字节编码 2 个八位字节)更紧凑,但总是比原始二进制大。它的值(value)仅在原始二进制文件不起作用的情况下才有值(value),因此额外的大小是值得的。

(严格来说,它是 4 个字符来编码 3 个八位字节,因此如果随后以 UTF-16 或 UTF-32 编码,则每 3 个编码可能是 8 或 16 个八位字节)。

关于string - Base64 字符串中的文件比原始文件占用更多空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016178/

相关文章:

string - Lua SQL 转义字符串(尝试) '"附近未完成的字符串}'

java - JRuby:从 RubyString 创建 Java InputStream 或 byte[]

java - 为什么 string.length() 是一个方法,而 int[].length 是一个属性?

javascript - 将 jQuery 对象返回到字符串中

string - Dart double toStringAsFixed 对数字进行四舍五入,但它不应该

r - 如何在 R 中将逗号和冒号分隔的列拆分为相应的列?

Java - 将 2D 字符串部分转换为 2D Integer ArrayList

java - StringUtils.isBlank 与正则表达式

java - 扫描仪需要/正在请求输入两次

arrays - 具有特定格式的数组到字符串