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. JDBC-数据库的编程(一)

    因为我使用的mysql数据库客户端程序是workBench,所以会用workBench来进行讲解. create table tbl_user( id int(11) unsigned not nul ...

  2. FFmpeg源代码结构图 - 编码

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  3. jar包执行报ClassNotFoundException

    使用Eclipse打包jar包,指定了main class. java -jar mongoCluster.jar 但是运行的时候报ClassNotFoundException NoClassDefF ...

  4. Android项目开发填坑记-9patchPng报错

    如果阅读体验不佳,请使用–> Github版 背景 之前写了一篇文章Android必知必会–NinePatch图片制作详细介绍了Android 9Patch图片的制作和一些Demo展示,这次说明 ...

  5. 在Debian/Ubuntu系统中安装*.sh与*.bin文件

    在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...

  6. 如何找到java对应的c/c++源码

    很多时候java经常被c鄙视,因为c说我是你的基础,但java竟然有如此强的生命力就必然有其存在的价值.本文不探讨各种开发语言的优劣,仅仅介绍如何找到java对应c/c++实现的源码.当我们追究一个j ...

  7. 2014年7月10日,我人生的最重要Upgrade

    2014年7月10日上午,我的小公主顺利的出生于国妇婴.之前各种紧张,各种不安.在不安中的前天晚上陪着来上海的董博士于方先生在人民广场聚餐.大家都是工作几年的,各种感慨,对于工作中的零零种种.还有对未 ...

  8. Java-IO之字符输入输出流(Reader和Writer)

    以字符为单位的输入流的公共父类是Reader: 以字符为单位的输出流的超类是Writer: 基于JDK8的Reader的源码: public abstract class Reader impleme ...

  9. C++之多态性与虚函数

    面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了&quo ...

  10. Java 学习之反射机制“解刨”分解类,并获取内容!

    正常情况下,单纯的做开发是接触不到反射机制的(额,当然并不排除例外的情况了).下面我就对我学到的反射方面的知识做一个小小的总结,旨在复习和以后的查看. 原理分析: 所谓反射就是将一个类当做我们研究的对 ...