'Read at most size bytes from the file (less if the read
hits EOF or no more data is immediately available on a pipe,
tty or similar device). If the size argument is negative or
omitted, read all data until EOF is reached. The bytes are
returned as a string object. An empty string is returned when
EOF is encountered immediately. (For certain files, like ttys,
it makes sense to continue reading after an EOF is hit.)'

def read(self, size=(-1)):

    result_size = self.__get_lines(size)
    return self.__extract_from_buffer(result_size)
