why need buffer() ?