Функция bufio.NewWriter
Функция bufio.NewWriter создает новый буферизированный писатель,
который оборачивает переданный в качестве параметра интерфейс io.Writer.
Буферизация позволяет накапливать данные в памяти и записывать их в целевой вывод
крупными блоками, что значительно сокращает количество системных вызовов
и повышает производительность при большом количестве операций записи.
Синтаксис
bufio.NewWriter(w io.Writer) *bufio.Writer
Базовый пример
Давайте создадим буферизированный писатель для стандартного вывода и запишем в него строку:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
writer := bufio.NewWriter(os.Stdout)
writer.WriteString("Hello, World!")
writer.Flush()
}
Результат выполнения кода:
"Hello, World!"
Важно вызвать метод Flush, чтобы гарантировать запись
всех буферизированных данных в целевой писатель. В противном случае
данные могут быть потеряны.
Пример с файлом
Давайте запишем данные в файл с использованием буферизированного писателя:
package main
import (
"bufio"
"os"
)
func main() {
file, err := os.Create("output.txt")
if err != nil {
panic(err)
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString("Line 1\n")
writer.WriteString("Line 2\n")
writer.WriteString("Line 3\n")
writer.Flush()
}
После выполнения кода в файле output.txt будет содержаться три строки текста.
Данные записываются в файл только после вызова метода Flush.
Пример с пользовательским писателем
Давайте создадим структуру, реализующую интерфейс io.Writer,
и используем ее с буферизированным писателем:
package main
import (
"bufio"
"fmt"
)
type CustomWriter struct {
data []byte
}
func (cw *CustomWriter) Write(p []byte) (n int, err error) {
cw.data = append(cw.data, p...)
return len(p), nil
}
func main() {
cw := &CustomWriter{}
writer := bufio.NewWriter(cw)
writer.WriteString("Hello")
writer.WriteString(" ")
writer.WriteString("World")
writer.Flush()
fmt.Println(string(cw.data))
}
Результат выполнения кода:
"Hello World"
Буферизированный писатель собирает все данные в буфере и записывает их
в пользовательский писатель единым блоком при вызове Flush.
Смотрите также
-
функцию
bufio.NewWriterSize,
которая создает буферизированный писатель с заданным размером буфера -
метод
Writer.Flush,
который принудительно записывает данные из буфера -
метод
Writer.WriteString,
который записывает строку в буферизированный писатель -
функцию
bufio.NewReader,
которая создает буферизированный читатель