use bufio.Writer