bufio.Reader.ReadByte
Метод ReadByte типа bufio.Reader читает один байт из буфера и возвращает его как значение типа byte. Если в буфере нет данных, метод пытается заполнить буфер из источника (например, из файла или сетевого соединения). Метод возвращает прочитанный байт и ошибку error, которая будет равна io.EOF при достижении конца входных данных.
Синтаксис
func (b *Reader) ReadByte() (byte, error)
Пример
Давайте прочитаем первый байт из строки, используя strings.NewReader и bufio.NewReader:
package 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)
}
Результат выполнения кода:
"Read byte: a"
Пример
Давайте прочитаем все байты из строки последовательно, пока не достигнем конца данных:
package 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()
}
Результат выполнения кода:
"1 2 3 4 5 "
Пример
Метод ReadByte также позволяет читать байты из файла. Давайте создадим пример чтения первых трех байт из временного файла:
package 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". Результат выполнения кода:
"h e l "
Смотрите также
-
метод
bufio.Reader.ReadRune,
который читает один рунический символ из буферизированного ввода -
метод
bufio.Reader.ReadString,
который читает строку до заданного разделителя -
метод
bufio.Reader.ReadBytes,
который читает байты до заданного разделителя -
метод
bufio.Reader.Peek,
который возвращает следующие байты без их извлечения из буфера