Sha256: 24ccbb481f6165484fd698496e2c5c0b1e244f21eafdd7089fc066c3b05b9762

Contents?: true

Size: 783 Bytes

Versions: 3

Compression:

Stored size: 783 Bytes

Contents

module FileWithBufferedRead
  require 'stringio'
  
  READ_BUFFER_SIZE = 1 << 22
  
  def buffered_read size
    output = read_buffer.read(size)
    until output.nil? or output.size == size or self.eof?
      output << read_buffer.read(size - output.size)
    end
    return output
  end
  
  private
  def buffer_left
    read_buffer.size - read_buffer.pos
  end
  
  def read_buffer
    if @read_buffer.nil? or @read_buffer.eof?
      # logger.debug{ "Buffering #{READ_BUFFER_SIZE} from #{self.inspect} current position: #{self.pos}" }
      @read_buffer = StringIO.new(read(READ_BUFFER_SIZE) || '')
      # logger.debug{ "Buffered #{@read_buffer.size}, EOF:#{self.eof?} current position: #{self.pos}" }
      @buffer_left = @read_buffer.size
    end
    @read_buffer
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
elia-2.4.2.pre lib/file_with_read_buffer.rb
elia-2.4.1 lib/file_with_read_buffer.rb
elia-2.3.2 lib/file_with_read_buffer.rb