class ZipTricks::Streamer::DeflatedWriter
Sends writes to the given `io` compressed using a {Zlib::Deflate}. Also registers data passing through it in a CRC32 checksum calculator. Is made to be completely interchangeable with the StoredWriter in terms of interface.
Constants
- CRC32_BUFFER_SIZE
The amount of bytes we will buffer before computing the intermediate CRC32 checksums. Benchmarks show that the optimum is 64KB (see `bench/buffered_crc32_bench.rb), if that is exceeded Zlib is going to perform internal CRC combine calls which will make the speed go down again.
Public Class Methods
# File lib/zip_tricks/streamer/deflated_writer.rb, line 13 def initialize(io) @compressed_io = io @deflater = ::Zlib::Deflate.new(Zlib::DEFAULT_COMPRESSION, -::Zlib::MAX_WBITS) @crc = ZipTricks::StreamCRC32.new @crc_buf = ZipTricks::WriteBuffer.new(@crc, CRC32_BUFFER_SIZE) end
Public Instance Methods
Writes the given data into the deflater, and flushes the deflater after having written more than FLUSH_EVERY_N_BYTES bytes of data
@param data data to be written @return self
# File lib/zip_tricks/streamer/deflated_writer.rb, line 25 def <<(data) @deflater.deflate(data) { |chunk| @compressed_io << chunk } @crc_buf << data self end
Returns the amount of data received for writing, the amount of compressed data written and the CRC32 checksum. The return value can be directly used as the argument to {Streamer#update_last_entry_and_write_data_descriptor}
@return [Hash] a hash of `{crc32, compressed_size, uncompressed_size}`
# File lib/zip_tricks/streamer/deflated_writer.rb, line 36 def finish @compressed_io << @deflater.finish until @deflater.finished? @crc_buf.flush {crc32: @crc.to_i, compressed_size: @deflater.total_out, uncompressed_size: @deflater.total_in} ensure @deflater.close end