How to Compress a String in Ruby (and Rails)
You can compress large strings using the Zlib module provided by Ruby's standard library.
Ruby's standard library provides the
Zlib module, which allows you to access the popular zlib library, a portable, free, and lossless data-compression library. It performs the compression and decompression functions in memory.
Zlib module, You can compress a string as follows.
require 'zlib' log_file = File.read('log/development.log') puts log_file.size # 4864196 compressed_log = Zlib::Deflate.deflate(log_file) compressed_log.size # 283024
As you can see, the compressed file is only 1/5th of the original file.
To decompress a compressed file, use the
Inflate class provided by this module.
original_log = Zlib::Inflate.inflate(compressed_log) puts original_log.size # 4871532
So that's how you can compress and decompress strings in Ruby.
Compression in Rails
If you are working in a Rails application, you can use the
ActiveSupport::Gzip wrapper, which simplifies the compression API.
compressed_log = ActiveSupport::Gzip.compress('large string') => "\x1F\x8B\b\x00yq5c\x00\x03..." original_log = ActiveSupport::Gzip.decompress(compressed_log) => "large string"
Behind the scenes, the
compress method uses the
Zlib::GzipWriter class which writes gzipped files. Similarly, the
decompress method uses
Zlib::GzipReader class which reads a gzipped file.