Метод bufio.Reader.ReadBytes
Метод ReadBytes типа bufio.Reader читает данные из буфера до первого
вхождения заданного байта-разделителя и возвращает прочитанную последовательность байтов
вместе с этим разделителем. В качестве единственного параметра метод принимает байт
delim, который служит маркером окончания чтения. Метод считывает данные до тех
пор, пока не встретит разделитель, или пока не достигнет конца файла (EOF).
Синтаксис
func (b *Reader) ReadBytes(delim byte) ([]byte, error)
Пример с разделителем новой строки
Давайте прочитаем строку из буфера до символа перевода строки '\n':
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := strings.NewReader("Hello\nWorld\nGo")
reader := bufio.NewReader(r)
res, err := reader.ReadBytes('\n')
if err != nil {
fmt.Println(err)
}
fmt.Printf("%q\n", res)
}
Результат выполнения кода:
"Hello\n"
Пример с пользовательским разделителем
В качестве разделителя можно использовать любой байт. Прочитаем данные до символа '|':
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := strings.NewReader("Go|Java|Python")
reader := bufio.NewReader(r)
res, err := reader.ReadBytes('|')
if err != nil {
fmt.Println(err)
}
fmt.Printf("%q\n", res)
}
Результат выполнения кода:
"Go|"
Пример чтения до конца данных
Если разделитель не встречается до конца данных, метод возвращает все данные, начиная
с текущей позиции до конца, и ошибку io.EOF. Давайте посмотрим на такой случай:
package main
import (
"bufio"
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello")
reader := bufio.NewReader(r)
res, err := reader.ReadBytes('\n')
if err != nil && err != io.EOF {
fmt.Println("Ошибка:", err)
}
fmt.Printf("%q\n", res)
}
Результат выполнения кода:
"Hello"
Смотрите также
-
метод
bufio.Reader.ReadString,
который читает данные до разделителя и возвращает строку -
метод
bufio.Reader.ReadLine,
который читает строку без разделителя -
метод
bufio.Reader.ReadByte,
который читает один байт из буфера -
тип
bufio.Reader,
предоставляющий методы для буферизированного чтения