def _read_prefetch(self, size):
<EOL>while True:<EOL><INDENT>offset = self._data_in_prefetch_buffers(self._realpos)<EOL>if offset is not None:<EOL><INDENT>break<EOL><DEDENT>if self._prefetch_done or self._closed:<EOL><INDENT>break<EOL><DEDENT>self.sftp._read_response()<EOL>self._check_exception()<EOL><DEDENT>if offset is None:<EOL><INDENT>self._prefetching = False<EOL>return None<EOL><DEDENT>prefetch = self._prefetch_data[offset]<EOL>del self._prefetch_data[offset]<EOL>buf_offset = self._realpos - offset<EOL>if buf_offset > <NUM_LIT:0>:<EOL><INDENT>self._prefetch_data[offset] = prefetch[:buf_offset]<EOL>prefetch = prefetch[buf_offset:]<EOL><DEDENT>if size < len(prefetch):<EOL><INDENT>self._prefetch_data[self._realpos + size] = prefetch[size:]<EOL>prefetch = prefetch[:size]<EOL><DEDENT>return prefetch<EOL>
read data out of the prefetch buffer, if possible.  if the data isn't
in the buffer, return None.  otherwise, behaves like a normal read.