Sha256: 133cd548fcc27bb6b2468a5a121a4905d603a951d627d346b9b93d63efb59bf3
Contents?: true
Size: 1.14 KB
Versions: 8
Compression:
Stored size: 1.14 KB
Contents
# frozen_string_literal: true require 'snappy/shim' module Snappy module Hadoop class Writer DEFAULT_BLOCK_SIZE = 256 * 1024 attr_reader :io, :block_size def initialize(io, block_size = DEFAULT_BLOCK_SIZE) @block_size = block_size @buffer = String.new @io = Snappy.set_encoding io if block_given? yield self dump! end end def <<(msg) @buffer << msg.to_s dump! if @buffer.size >= @block_size end alias_method :write, :<< def dump! offset = 0 while offset < @buffer.size uncompressed = @buffer[offset, @block_size] compressed = Snappy.deflate(uncompressed) # Uncompressed size (32 bit integer, BE), compressed size (32 bit integer, BE), data. @io << [uncompressed.size, compressed.size, compressed].pack("NNa#{compressed.size}") offset += uncompressed.size end @io.flush @buffer.clear end alias_method :flush, :dump! def close @io.close end end end end
Version data entries
8 entries across 8 versions & 1 rubygems