# File lib/ole/ranges_io.rb, line 158
  def read limit=nil
    data = ''
    return data if eof?
    limit ||= size
    pos, len = @ranges[@active]
    diff = @pos - @offsets[@active]
    pos += diff
    len -= diff
    loop do
      @io.seek pos
      if limit < len
        s = @io.read(limit).to_s
        @pos += s.length
        data << s
        break
      end
      s = @io.read(len).to_s
      @pos += s.length
      data << s
      break if s.length != len
      limit -= len
      break if @active == @ranges.length - 1
      @active += 1
      pos, len = @ranges[@active]
    end
    data
  end