2.27. Compressing Strings
The Zlib library provides a way of compressing and decompressing strings and files.
Why might we want to compress strings in this way? Possibly to make database I/O faster, to optimize network usage, or even to obscure stored strings so that they are not easily read.
The Deflate and Inflate classes have class methods named deflate and inflate, respectively. The deflate method (which obviously compresses) has an extra parameter to specify the style of compression. The styles show a typical trade-off between compression quality and speed; BEST_COMPRESSION results in a smaller compressed string, but compression is relatively slow; BEST_SPEED compresses faster but does not compress as much. The default (DEFAULT_COMPRESSION) is typically somewhere in between in both size and speed.
require 'zlib' include Zlib long_string = ("abcde"*71 + "defghi"*79 + "ghijkl"*113)*371 # long_string has 559097 characters s1 = Deflate.deflate(long_string,BEST_SPEED) # 4188 chars s3 = Deflate.deflate(long_string) # 3568 chars s2 = Deflate.deflate(long_string,BEST_COMPRESSION) # 2120 chars
Informal experiments suggest that the speeds vary by a factor of two, and the compression amounts vary inversely by the same amount. Speed and compression are greatly dependent on the contents of the string. Speed of course also is affected by hardware.
Be aware that there is a "break-even" point below which it is essentially useless to compress a string (unless you are trying to make the string unreadable). Below this point, the overhead of compression may actually result in a longer string.