Функция bufio.NewReaderSize

Функция bufio.NewReaderSize создает новый объект bufio.Reader, который выполняет буферизированное чтение данных из переданного интерфейса io.Reader. В первый параметр мы передаем источник данных (например, файл или сетевого соединение), во второй параметр мы передаем размер буфера в байтах, который будет использоваться для чтения. Если размер буфера меньше минимального значения, функция автоматически устанавливает минимально допустимый размер.

Синтаксис

gobufio.NewReaderSize(rd io.Reader, size int) *bufio.Reader

Пример

Давайте создадим буферизированный ридер с буфером 64 байта и прочитаем первую строку из строки:

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  s := "abcde\n12345"
  r := strings.NewReader(s)
  br := bufio.NewReaderSize(r, 64)

  line, err := br.ReadString('\n')
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(line)
}

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

go"abcde\n"

Пример

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

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  s := "1234567890abcdefghijklmnopqrstuvwxyz"
  r := strings.NewReader(s)
  br := bufio.NewReaderSize(r, 8)

  buf := make([]byte, 5)
  for {
    n, err := br.Read(buf)
    if n > 0 {
      fmt.Print(string(buf[:n]))
    }
    if err != nil {
      fmt.Println()
      break
    }
  }
}

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

go"1234567890abcdefghijklmnopqrstuvwxyz"

Пример

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

gopackage main

import (
  "bufio"
  "fmt"
  "strings"
)

func main() {
  s := "abcde12345"
  r := strings.NewReader(s)
  br := bufio.NewReaderSize(r, 10)

  data, err := br.Peek(5)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(string(data))

  data, err = br.Peek(8)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(string(data))
}

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

go"abcde"
"abcde123"

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

  • функцию bufio.NewReader,
    которая создает ридер с размером буфера по умолчанию
  • функцию bufio.NewWriterSize,
    которая создает буферизированный писатель с заданным размером буфера
  • функцию bufio.Reader.ReadString,
    которая читает строку до указанного разделителя
  • функцию bufio.Reader.Peek,
    которая позволяет заглянуть в буфер без извлечения данных