How to Compress a String in Ruby (and Rails)

September 28, 2022

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.

Using 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.

Sign up for my newsletter

Let's learn to become better developers.

Comments

No comments yet. Be the first to leave one.

Sign in to leave a comment.