Sha256: 1b4a7b12c9a8548aecf9b49eb898402a960233152892112c37c2eab0e69ddd09

Contents?: true

Size: 1.3 KB

Versions: 9

Compression:

Stored size: 1.3 KB

Contents

module Snappy
  class Reader
    attr_reader :io, :magic, :default_version, :minimum_compatible_version

    def initialize(io)
      @io = io
      @io.set_encoding Encoding::ASCII_8BIT unless RUBY_VERSION =~ /^1\.8/
      read_header!
      yield self if block_given?
    end

    def each
      until @io.eof?
        if @chunked
          size = @io.read(4).unpack('N').first
          yield Snappy.inflate(@io.read(size)) if block_given?
        else
          yield Snappy.inflate @io.read if block_given?
        end
      end
    end

    def read
      @buff = StringIO.new
      each do |chunk|
        @buff << chunk
      end
      @buff.string
    end

    def each_line(sep_string=$/)
      last = ""
      each do |chunk|
        chunk = last + chunk
        lines = chunk.split(sep_string)
        last = lines.pop
        lines.each do |line|
          yield line if block_given?
        end
      end
      yield last
    end

    private

    def read_header!
      header = @io.read Snappy::Writer::MAGIC.length
      if header.length == Snappy::Writer::MAGIC.length && header == Snappy::Writer::MAGIC
        @magic, @default_version, @minimum_compatible_version = header, *@io.read(8).unpack('NN')
        @chunked = true
      else
        @io.rewind
        @chunked = false
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
snappy-0.0.15-java lib/snappy/reader.rb
snappy-0.0.15 lib/snappy/reader.rb
snappy-0.0.14-java lib/snappy/reader.rb
snappy-0.0.14 lib/snappy/reader.rb
snappy-0.0.13 lib/snappy/reader.rb
snappy-0.0.12-java lib/snappy/reader.rb
snappy-0.0.12 lib/snappy/reader.rb
snappy-0.0.11-java lib/snappy/reader.rb
snappy-0.0.11 lib/snappy/reader.rb