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. Zookeeper总概

    zookeeper是一个开源的分布式协调服务.是典型的分布式数据一致性的解决方案. zookeeper可以保证以下分布式一致性的特性 1. 顺序性:同一客户端发起的事务请求,最终会严格的按照发出顺序应 ...

  2. 13常用sql语句

    创建语句 CREATE table if not exists b(id INTEGER PRIMARY KEY AUTOINCREMENT,waijian int ,FOREIGN KEY (wai ...

  3. 5.3、Android Studio录像

    Android Monitor允许你从设备中录制一段MP4格式的视频,最长允许3分钟. 录制视频 在硬件设备中录制视频: 1. 打开一个项目 2. 在设备中运行应用 3. 显示Android Moni ...

  4. JQuery之动画与特效

    显示与隐藏 show(spped,[callback])与hide(spped,[callback]) speed可选填slow.normal.fast,对应的速度分别为600ms.400ms.200 ...

  5. 详解EBS接口开发之供应商导入(补充)--供应商银行账户更新

    CREATE OR REPLACE PACKAGE BODY update_vendor_account IS PROCEDURE main(errbuf OUT VARCHAR2, retcode ...

  6. dbcp连接池不合理的锁导致连接耗尽

    应用报错,表象来看是连接池爆满了. org.springframework.transaction.CannotCreateTransactionException: Could not open J ...

  7. iOS中 Realm的学习与使用 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...

  8. UNIX网络编程——带外数据

    许多传输层有带外数据的概念,它有时也称为经加速数据.其想法是一个连接的某端发生了重要的事情,而且该端希望迅速通告其对端.这里"迅速"意味着这种通知应该在已排队等待发送的任何&quo ...

  9. python的subprocess:子程序调用(调用执行其他命令);获取子程序脚本当前路径问题

    python当前进程可以调用子进程,子进程可以执行其他命令,如shell,python,java,c... 而调用子进程方法有 os模块 参见:http://blog.csdn.net/longshe ...

  10. Java-IO之总框架

    在Java IO中我们会经常提到输入流和输出流,流是一种抽象的数据总称,本质是能够进行数据的传输.按照流的方向分为:输入流和输出流.按照流中处理数据的单位,可以将其区分为:字节流和字符流.在Java中 ...