Функция bufio.NewWriterSize

Функция bufio.NewWriterSize создает новый объект bufio.Writer, который буферизирует запись в указанный io.Writer. В первый параметр мы передаем поток вывода (например, os.Stdout или файл), во второй параметр мы передаем размер буфера в байтах. Если размер буфера меньше или равен нулю, функция устанавливает минимальный размер буфера. Буферизация позволяет уменьшить количество системных вызовов, что повышает производительность при множественных операциях записи.

Синтаксис

gobufio.NewWriterSize(w io.Writer, size int) *bufio.Writer

Пример

Давайте создадим буферизированный писатель с размером буфера 4096 байт и запишем несколько строк:

gopackage main

import (
  "bufio"
  "fmt"
  "os"
)

func main() {
  writer := bufio.NewWriterSize(os.Stdout, 4096)
  writer.WriteString("Hello, ")
  writer.WriteString("World!")
  writer.Flush()
}

Результат выполнения кода:

go"Hello, World!"

Пример

Давайте проверим, что данные действительно буферизируются, и они не будут выведены до вызова Flush:

gopackage main

import (
  "bufio"
  "fmt"
  "os"
)

func main() {
  writer := bufio.NewWriterSize(os.Stdout, 100)
  writer.WriteString("Buffered data")
  fmt.Println("Data is buffered")
  writer.Flush()
}

Результат выполнения кода:

go"Data is buffered"
"Buffered data"

Пример

Давайте создадим буферизированный писатель с размером буфера 5 байт и запишем строку, которая превышает размер буфера:

gopackage main

import (
  "bufio"
  "os"
)

func main() {
  writer := bufio.NewWriterSize(os.Stdout, 5)
  writer.WriteString("12345")
  writer.Flush()
}

Результат выполнения кода:

go"12345"

Смотрите также

  • функцию bufio.NewWriter,
    которая создает буферизированный писатель с размером буфера по умолчанию
  • функцию bufio.Writer.WriteString,
    которая записывает строку в буферизированный писатель
  • функцию bufio.Writer.Flush,
    которая сбрасывает буфер в поток вывода
  • функцию bufio.NewReaderSize,
    которая создает буферизированный читатель с заданным размером буфера