Zlib

Zlib

Zlib 모듈은 zlib 라이브러리에 접근할 수 있게 해줘요. zlib은 이식 가능하고, 무료이며, 범용적이고, 법적으로 자유로운(즉 어떤 특허에도 걸리지 않는) 무손실 데이터 압축 라이브러리로 설계됐어요. 거의 모든 컴퓨터 하드웨어와 운영체제에서 쓸 수 있죠.

zlib 압축 라이브러리는 압축되지 않은 데이터의 무결성 검사(integrity check)를 포함해서, 메모리 안에서의 압축·압축 해제 함수를 제공해요.

zlib 압축 데이터 포맷은 RFC 1950에 기술돼 있는데, 이것은 RFC 1951에 기술된 deflate 스트림을 감싼 래퍼예요. 이 라이브러리는 또한 IO와 비슷한 인터페이스로 gzip(.gz) 포맷 파일의 읽기·쓰기도 지원해요. gzip 포맷은 RFC 1952에 기술돼 있고, 이것 역시 deflate 스트림을 감싼 래퍼예요.

zlib 포맷은 메모리 안과 통신 채널에서 쓰기에 컴팩트하고 빠르게 설계됐고, gzip 포맷은 파일시스템에서 단일 파일 압축용으로 설계됐어요. gzip은 디렉터리 정보를 유지하려고 zlib보다 더 큰 헤더를 가지며, zlib과 다른 더 느린 검사 방식을 사용해요.

zlib에 대한 더 자세한 정보는 시스템의 zlib.h를 참고해요. 래퍼로 기본 파라미터를 써서 문자열을 압축하는 건 아주 간단해요:

require "zlib"

data_to_compress = File.read("don_quixote.txt")

puts "Input size: #{data_to_compress.size}"
#=> Input size: 2347740

data_compressed = Zlib::Deflate.deflate(data_to_compress)

puts "Compressed size: #{data_compressed.size}"
#=> Compressed size: 887238

uncompressed_data = Zlib::Inflate.inflate(data_compressed)

puts "Uncompressed data is: #{uncompressed_data}"
#=> Uncompressed data is: The Project Gutenberg EBook of Don Quixote...

(GZIP_SUPPORT가 있으면)

출처: Ruby 3.3 API

본문

adler32(string, adler) → integer

string에 대한 Adler-32 체크섬을 계산하고, 갱신된 adler 값을 돌려줘요. string이 생략되면 Adler-32 초기값을 돌려줘요. adler가 생략되면 초기값이 adler에 주어졌다고 가정해요. stringIO 인스턴스면 IO에서 IOnil을 반환할 때까지 읽어서, 읽은 모든 데이터의 Adler-32를 돌려줘요.

require "zlib"

data = "foo"
puts "Adler32 checksum: #{Zlib.adler32(data).to_s(16)}"
#=> Adler32 checksum: 2820145

adler32_combine(adler1, adler2, len2) → integer

두 Adler-32 체크 값 adler1adler2를 하나로 합쳐요. len2adler2를 만드는 데 사용된 문자열의 길이예요.

crc32(string, crc) → integer

string에 대한 CRC 체크섬을 계산하고, 갱신된 crc 값을 돌려줘요. string이 생략되면 CRC 초기값을 돌려줘요. crc가 생략되면 초기값이 crc에 주어졌다고 가정해요. stringIO 인스턴스면 IO에서 IOnil을 반환할 때까지 읽어서, 읽은 모든 데이터의 CRC 체크섬을 돌려줘요.

crc32_combine(crc1, crc2, len2) → integer

두 CRC-32 체크 값 crc1crc2를 하나로 합쳐요. len2crc2를 만드는 데 사용된 문자열의 길이예요.

crc_table → array

CRC 체크섬을 계산하는 데 쓰는 테이블을 배열로 돌려줘요.

deflate(string[, level]) → string

주어진 string을 압축해요. level의 유효한 값은 Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION, 또는 0부터 9까지의 정수예요.

이 메서드는 다음 코드와 거의 동일해요:

def deflate(string, level)
  z = Zlib::Deflate.new(level)
  dst = z.deflate(string, Zlib::FINISH)
  z.close
  dst
end

Zlib.inflate도 함께 참고하세요.

gunzip(src) → String

주어진 gzip된 문자열 src을 디코드해요.

이 메서드는 다음 코드와 거의 동일해요:

def gunzip(string)
  sio = StringIO.new(string)
  gz = Zlib::GzipReader.new(sio, encoding: Encoding::ASCII_8BIT)
  gz.read
ensure
  gz&.close
end

Zlib.gzip도 함께 참고하세요.

gzip(src, level: nil, strategy: nil) → String

주어진 문자열 src을 gzip해요. level의 유효한 값은 Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION(기본값), 또는 0부터 9까지의 정수예요.

이 메서드는 다음 코드와 거의 동일해요:

def gzip(string, level: nil, strategy: nil)
  sio = StringIO.new
  sio.binmode
  gz = Zlib::GzipWriter.new(sio, level, strategy)
  gz.write(string)
  gz.close
  sio.string
end

Zlib.gunzip도 함께 참고하세요.

inflate(string) → string

string을 압축 해제해요. 압축 해제에 사전(dictionary)이 필요하면 Zlib::NeedDict 예외를 발생시켜요.

이 메서드는 다음 코드와 거의 동일해요:

def inflate(string)
  zstream = Zlib::Inflate.new
  buf = zstream.inflate(string)
  zstream.finish
  zstream.close
  buf
end

Zlib.deflate도 함께 참고하세요.

zlib_version → string

zlib 라이브러리의 버전을 나타내는 문자열을 돌려줘요.