# File lib/net/sftp/operations/read.rb, line 34
    def perform( handle, options={} )
      @length = options[:length] || -1
      @handle = handle
      @offset = options[:offset] || 0
      @chunk_size = options[:chunk_size] || DEFAULT_CHUNK_SIZE
      @progress_callback = options[:progress_callback]
      @data = ""

      real_length = ( @length >= 0 && @length < @chunk_size ?
                          @length : @chunk_size )
      @driver.read( nil, @handle, @offset, real_length )
    end