buffer methods are all implemented except for fill_buffer()