登录
首页 >  Golang >  Go问答

将字符串进行压缩,以及如何进行反向解压缩

来源:stackoverflow

时间:2024-02-22 08:36:25 298浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《将字符串进行压缩,以及如何进行反向解压缩》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有一个来自 Base64 的长 string,但是它太长了,我怎样才能将它转换为短的。我希望这是一个可逆的操作,因为我想从短的操作中得到长的操作。 顺便说一下,我不想将这两个字符串保存到数据库中。


正确答案


由于 Pigeonhole principle,通常不可能将任意长字符串转换为任意短字符串:

  • 可逆性意味着转换余域(小字符串)需要至少具有与转换域(大字符串)一样多的元素,
  • 不同的长字符串比不同的短字符串要多得多。

与整数类比,考虑将 3 位数字(900 种可能性)转换为 2 位数字(90 种可能性)并且仍然可逆,如 90 < 900。

但是,如果长字符串是可预测的并且有大量冗余,您可以尝试应用gzip等无损压缩算法,以便在常见情况下缩短它。

base64编码和解码确实是可逆操作。解码后的字符串较短,因此在某些情况下传输和存储可能更便宜(并非总是如此,ymmv)。

标准库中的 base64 包拥有您轻松将“长”base64 编码字符串解码为原始解码字符串所需的一切,大约缩短了 25%:

decoded, err := base64.StdEncoding.DecodeString(encoded)
if err != nil {
    fmt.Println("error:", err)
}

你可以在演示中尝试一下:

请注意,base64 格式存在 several variants 个,因此您需要确切地知道使用哪一个进行编码,并使用相同的编码进行解码。 base64.stdencoding 是 rfc 4648 的变体。

好了,本文到此结束,带大家了解了《将字符串进行压缩,以及如何进行反向解压缩》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>