What's the difference between ResponseWriter.Write and io.WriteString?

I’ve seen three ways of writing content to HTTP response:

func Handler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "blabla.\n")
}

And:

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("blabla\n"))
}

Also there’s:

fmt.Fprintf(w, "blabla")

What’s the difference between them? Which one is preferred to use?