libz
1 One-Shot Compression
gzip-compress
gzip-decompress
gzip-level/  c
2 Buffer Compression
gzip-compress!
gzip-decompress!
3 Streaming Ports
open-gzip-output
open-gzip-input
9.1

libz🔗ℹ

Jay Bonthius <jay@jmbmail.com>

 (require libz) package: libz

Racket bindings to zlib for gzip compression.

1 One-Shot Compression🔗ℹ

procedure

(gzip-compress src [level])  bytes?

  src : bytes?
  level : gzip-level/c = 6
Compresses src using gzip format and returns the compressed bytes.

(require libz)
 
(define compressed (gzip-compress #"hello world"))
(gzip-decompress compressed)

procedure

(gzip-decompress src [max-decompressed-size])  bytes?

  src : bytes?
  max-decompressed-size : (or/c #f exact-positive-integer?) = #f
Decompresses gzip-encoded src and returns the original bytes. If max-decompressed-size is not #f, limits the output size to prevent decompression bombs.

Integer in the range 0 to 9.

2 Buffer Compression🔗ℹ

procedure

(gzip-compress! src dst [level])  exact-nonnegative-integer?

  src : bytes?
  dst : bytes?
  level : gzip-level/c = 6
Compresses src into the pre-allocated buffer dst using gzip format. Returns the number of bytes written. Raises an error if dst is too small.

procedure

(gzip-decompress! src dst)  exact-nonnegative-integer?

  src : bytes?
  dst : bytes?
Decompresses gzip-encoded src into the pre-allocated buffer dst. Returns the number of bytes written. Raises an error if dst is too small.

3 Streaming Ports🔗ℹ

procedure

(open-gzip-output out    
  [#:level level    
  #:close? close?    
  #:name name])  output-port?
  out : output-port?
  level : gzip-level/c = 6
  close? : boolean? = #t
  name : symbol? = 'gzip-output
Returns an output port that compresses data written to it using gzip format and forwards the compressed bytes to out. Closing the returned port flushes the remaining compressed data. If close? is #t, closing also closes out.

(require libz)
 
(define out (open-output-bytes))
(define gzip-out (open-gzip-output out))
(write-bytes #"hello world" gzip-out)
(close-output-port gzip-out)
(gzip-decompress (get-output-bytes out))

procedure

(open-gzip-input in    
  [#:close? close?    
  #:name name])  input-port?
  in : input-port?
  close? : boolean? = #t
  name : symbol? = 'gzip-input
Returns an input port that decompresses gzip-encoded data read from in. If close? is #t, closing the returned port also closes in.