bufio.Reader.ReadByte

Метод ReadByte типа bufio.Reader читает один байт из буфера и возвращает его как значение типа byte. Если в буфере нет данных, метод пытается заполнить буфер из источника (например, из файла или сетевого соединения). Метод возвращает прочитанный байт и ошибку error, которая будет равна io.EOF при достижении конца входных данных.

Синтаксис

gofunc (b *Reader) ReadByte() (byte, error)

Пример

Давайте прочитаем первый байт из строки, используя strings.NewReader и bufio.NewReader:

gopackage main

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

func main() {
  r := bufio.NewReader(strings.NewReader("abcde"))
  b, err := r.ReadByte()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Printf("Read byte: %c\n", b)
}

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

go"Read byte: a"

Пример

Давайте прочитаем все байты из строки последовательно, пока не достигнем конца данных:

gopackage main

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

func main() {
  r := bufio.NewReader(strings.NewReader("12345"))
  for {
    b, err := r.ReadByte()
    if err == io.EOF {
      break
    }
    if err != nil {
      fmt.Println("Error:", err)
      return
    }
    fmt.Printf("%c ", b)
  }
  fmt.Println()
}

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

go"1 2 3 4 5 "

Пример

Метод ReadByte также позволяет читать байты из файла. Давайте создадим пример чтения первых трех байт из временного файла:

gopackage main

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

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  r := bufio.NewReader(file)
  for i := 0; i < 3; i++ {
    b, err := r.ReadByte()
    if err != nil {
      fmt.Println("Error reading byte:", err)
      return
    }
    fmt.Printf("%c ", b)
  }
  fmt.Println()
}

Предположим, файл example.txt содержит строку "hello". Результат выполнения кода:

go"h e l "

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

  • метод bufio.Reader.ReadRune,
    который читает один рунический символ из буферизированного ввода
  • метод bufio.Reader.ReadString,
    который читает строку до заданного разделителя
  • метод bufio.Reader.ReadBytes,
    который читает байты до заданного разделителя
  • метод bufio.Reader.Peek,
    который возвращает следующие байты без их извлечения из буфера