首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在拼音中压缩大字符串

在拼音中压缩大字符串
EN

Stack Overflow用户
提问于 2013-07-26 21:22:40
回答 1查看 14.4K关注 0票数 24

我有一个web应用程序(Ruby on rails),它发送一些YAML作为隐藏输入字段的值。

现在,我想减小发送到浏览器的文本的大小。什么是最有效的无损压缩形式,可以发送最少的数据?我同意在服务器端产生额外的压缩和解压缩成本。

EN

回答 1

Stack Overflow用户

发布于 2013-07-26 22:10:30

您可以在ruby内核中使用zlib实现来对数据进行in / data:

代码语言:javascript
复制
require "zlib"
data = "some long yaml string" * 100
compressed_data = Zlib::Deflate.deflate(data)
#=> "x\x9C+\xCE\xCFMU\xC8\xC9\xCFKW\xA8L\xCC\xCDQ(.)\xCA\xCCK/\x1E\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15\x1C\x15D\x15\x04\x00\xB3G%\xA6"

您应该对压缩数据进行base64编码,以使其可打印:

代码语言:javascript
复制
require 'base64'
encoded_data = Base64.encode64 compressed_data
#=> "eJwrzs9NVcjJz0tXqEzMzVEoLinKzEsvHhUcFRwVHBUcFRwVHBUcFUQVBACz\nRyWm\n"

稍后,在客户端,您可以使用pako (javascript的zlib端口)来获取数据。This answer可能会帮助您实现JS部分。

为了让您了解这有多有效,下面是示例字符串的大小:

代码语言:javascript
复制
data.size            # 2100
compressed_data.size #   48
encoded_data.size    #   66

同样的道理,在客户机上压缩,在服务器上膨胀时也是如此。

代码语言:javascript
复制
Zlib::Inflate.inflate(Base64.decode64(encoded_data))
#=> "some long yaml stringsome long yaml str ... (shortened, as the string is long :)

免责声明:

  • ruby zlib实现应该与pako实现兼容。但是我还没有试过。
  • 关于字符串大小的数字有点被欺骗了。Zlib在这里非常有效,因为字符串重复了很多次。现实生活中的数据通常不会重复这么多。
票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17882463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档