ruby2.1.3的核心类中包含了Zlib库,其中的Zlib模块包含了对字符串压缩和解压的方法:

irb(main):180:0> Zlib.class
=> Module
irb(main):181:0> Zlib.constants
=> [:Error, :StreamEnd, :NeedDict, :DataError, :StreamError, :MemError, :BufError, :VersionError, :VERSION, :ZLIB_VERSION, :ZStream, :BINARY, :ASCII, :TEXT,
:UNKNOWN, :Deflate, :Inflate, :NO_COMPRESSION, :BEST_SPEED, :BEST_COMPRESSION, :DEFAULT_COMPRESSION, :FILTERED, :HUFFMAN_ONLY, :RLE, :FIXED,
:DEFAULT_STRATEGY, :MAX_WBITS, :DEF_MEM_LEVEL, :MAX_MEM_LEVEL, :NO_FLUSH, :SYNC_FLUSH, :FULL_FLUSH, :FINISH, :GzipFile, :GzipWriter, :GzipReader,
:OS_CODE, :OS_MSDOS, :OS_AMIGA, :OS_VMS, :OS_UNIX, :OS_ATARI, :OS_OS2, :OS_MACOS, :OS_TOPS20, :OS_WIN32, :OS_VMCMS, :OS_ZSYSTEM, :OS_CPM,
 :OS_QDOS, :OS_RISCOS, :OS_UNKNOWN]

我们写一段简单的代码测试下:

#!/usr/bin/ruby

require 'zlib'
include Zlib

def sh_size(str)
	puts "string size is #{str.size}"
end

def calc(start,&b)
	zstr = b.call
	puts "take %f s" % (Time.now - start)
	sh_size(zstr)
	zstr
end

def zip(str,mode=DEFAULT_COMPRESSION)
	printf("Test Mode:#{mode} : ")
	calc(Time.now)  do
		Deflate.deflate(str,mode)
	end
end

def unzip(zstr)
	Inflate.inflate(zstr)
end

str = (('a'..'z').to_a + ('0'..'9').to_a).shuffle.join('') * 1000000
puts "org_str size is #{str.size}"

zip(str,BEST_SPEED)
zip(str)
zstr = zip(str,BEST_COMPRESSION)

sh_size unzip(zstr)

运行结果如下:

wisy@wisy-ThinkPad-X61:~/src/ruby_src$ ./fk.rb
org_str size is 36000000
Test Mode:1 : take 0.255531 s
string size is 192037
Test Mode:-1 : take 0.497991 s
string size is 104822
Test Mode:9 : take 0.539890 s
string size is 104822
string size is 36000000

不如把所有压缩级别都试一下吧:

-1.upto(9) {|x| zip(str,x)}

最后结果如下,感觉很多级别都差不多啊:

org_str size is 36000000
Test Mode:-1 : take 0.433412 s
string size is 104821
Test Mode:0 : take 0.383851 s
string size is 36005496
Test Mode:1 : take 0.254758 s
string size is 192036
Test Mode:2 : take 0.264866 s
string size is 192036
Test Mode:3 : take 0.254311 s
string size is 192036
Test Mode:4 : take 0.438662 s
string size is 104821
Test Mode:5 : take 0.429670 s
string size is 104821
Test Mode:6 : take 0.439067 s
string size is 104821
Test Mode:7 : take 0.435192 s
string size is 104821
Test Mode:8 : take 0.444039 s
string size is 104821
Test Mode:9 : take 0.453219 s
string size is 104821

ruby直接字符串压缩与解压缩的更多相关文章

  1. zip格式压缩、解压缩(C#)

    压缩方法 #region 压缩 /// <summary> /// 压缩 /// </summary> /// <param name="bytes" ...

  2. Linux系统之压缩、解压缩,vi编辑器,系统初始化服务和系统监控

    一.正文处理,压缩与解压缩 1.内容重定向>与>> >:覆盖,将>号左边的结果覆盖到>号右边的文件中,如果文件不存在,则先创建一个新的空文件并覆盖 >> ...

  3. GZIP压缩、解压缩工具类

    GZIP压缩.解压缩工具类: public class GZIPUtiles { public static String compress(String str) throws IOExceptio ...

  4. tar的打包-压缩与解压缩,并解压到指定的目录

    tar在linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数: -c :create 建立压缩档案的参数:-x : 解压缩压缩档案的参数:-z : 是否需 ...

  5. php字符串压缩

    在PHP中偶尔遇到字符串的压缩,比如一个长字符串,数据库开始设计的字段存不下,但是又不想改数据库字段存储长度,就可以用压缩的方式降低数据字段字符串的长度数量级,把几百个字符的字符串压缩到几十个字符.总 ...

  6. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

  7. jspacker压缩及解压缩研究(js eval)

    起因: 在研究爬虫的时候发现很多网站都出现了同一种方式的js混淆,并且名字都是pde.js,怀疑是使用了同一款混淆工具,所以研究一下. 这款工具叫JS Packer,并不是专门的混淆工具,而是一款js ...

  8. 记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】

    一.DES加密.解密 #region DES加密解密 /// <summary> /// 进行DES加密 /// </summary> /// <param name=& ...

  9. 利用JAVA API函数实现数据的压缩与解压缩

      综述 许多信息资料都或多或少的包含一些多余的数据.通常会导致在客户端与服务器之间,应用程序与计算机之间极大的数据传输量.最常见的解决数据存储和信息传送的方法是安装额外的存储设备和扩展现有的通讯能力 ...

随机推荐

  1. Android 访问assets下的文件

    assets下经常可以放一些比较大的资源,对于这些资源我们如何访问. 步骤 1.获取AssetManager. AssetManager am = getResources().getAssets() ...

  2. Python模块探秘之EasyGui

    在Windows想用Python开发一些简单的界面,所以找到了很容易上手的EasyGui库.下面就分享一下简单的使用吧. 参考的链接:官网Tutorial 接下来,我将从简单,到复杂一点点的演示如何使 ...

  3. iOS 中如何判断当前是2G/3G/4G/5G/WiFi

    5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了. 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API.而在撸WebRTC音视频通 ...

  4. Linux内核分配内存的方式

    page = alloc_pages(GFP_KERNEL, get_order(1234));分配失败返回NULLGFP_KERNEL  ---> 分配标志,当没有足够内存分配时,睡眠阻塞,直 ...

  5. 【图的DFS】图的DFS非递归算法

    在DFS的递归算法中,DFS框架如下: 1访问起点v0 2依次以v0的未访问的连接点为起点,DFS搜索图,直至图中所有与v0路径相通的顶点都被访问. 3若该图为非连通图,则图中一定还存在未被访问的顶点 ...

  6. RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

            在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇 ...

  7. 【一天一道LeetCode】#84. Largest Rectangle in Histogram

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given n ...

  8. Red Hat Enterprise Linux 5 64-bit chinese language support config steps

    Red Hat Enterprise Linux 5 64-bit 系统下安装中文语言支持方法 测试环境:Windows2012+Vmvare9.0+Red Hat Enterprise Linux ...

  9. 导航控制器&nbsp;UI_08(上)

    主要内容:UINavigationController 重要:属性传值(向后一个界面传值).代理传值(向前相邻的界面传值).单例传值(不相邻的界面向前传值) 1.UINavigationControl ...

  10. B/S和C/S架构图解

    软件:B/S和C/S两种架构模式.接下来用三张图片解释,什么是B/S什么是C/S. 图片一:软件架构模式 图片二:C/S结构模式 图片三:B/S结构模式 相信图解胜过冗长文字的解释,什么是B/S什么是 ...