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

Version Path
snappy-0.4.0-java lib/snappy/hadoop/writer.rb
snappy-0.4.0 lib/snappy/hadoop/writer.rb
snappy-0.3.0-java lib/snappy/hadoop/writer.rb
snappy-0.3.0 lib/snappy/hadoop/writer.rb
snappy-0.2.0-java lib/snappy/hadoop/writer.rb
snappy-0.2.0 lib/snappy/hadoop/writer.rb
snappy-0.1.0-java lib/snappy/hadoop/writer.rb
snappy-0.1.0 lib/snappy/hadoop/writer.rb