Функция bufio.ScanBytes
Функция bufio.ScanBytes представляет собой функцию разделения (split function) для типа bufio.Scanner. Она используется для пошагового чтения данных, разделяя входной поток на отдельные байты. В отличие от других функций разделения, таких как ScanLines или ScanWords, ScanBytes возвращает каждый байт как отдельный токен, что позволяет обрабатывать данные на самом низком уровне.
Функция возвращает срез байтов ([]byte), содержащий один байт из входного потока. Ее можно передать в качестве аргумента в метод Scanner.Split, чтобы настроить сканер на побайтовое чтение.
Синтаксис
bufio.ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
Пример использования со Scanner
Давайте создадим сканер для строки "abcde" и настроим его на чтение по байтам:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
input := "abcde"
scanner := bufio.NewScanner(strings.NewReader(input))
scanner.Split(bufio.ScanBytes)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
Результат выполнения кода:
a
b
c
d
e
Пример работы с байтовым срезом
Давайте проверим, что каждый токен действительно является отдельным байтом, используя метод Scanner.Bytes:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
input := "12345"
scanner := bufio.NewScanner(strings.NewReader(input))
scanner.Split(bufio.ScanBytes)
for scanner.Scan() {
byteData := scanner.Bytes()
fmt.Printf("Token length: %d, value: %q\n", len(byteData), byteData)
}
}
Результат выполнения кода:
Token length: 1, value: "1"
Token length: 1, value: "2"
Token length: 1, value: "3"
Token length: 1, value: "4"
Token length: 1, value: "5"
Пример обработки ошибок
Давайте рассмотрим пример с обработкой ошибок при сканировании:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
input := "abcde"
scanner := bufio.NewScanner(strings.NewReader(input))
scanner.Split(bufio.ScanBytes)
for scanner.Scan() {
fmt.Printf("Scanned byte: %q\n", scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Printf("Scanning error: %v\n", err)
}
}
Результат выполнения кода:
Scanned byte: "a"
Scanned byte: "b"
Scanned byte: "c"
Scanned byte: "d"
Scanned byte: "e"
Смотрите также
-
функцию
bufio.Scanner.Split,
которая задает функцию разделения для сканера -
функцию
bufio.Scanner.Bytes,
которая возвращает текущий токен как срез байтов -
функцию
bufio.ScanLines,
которая разделяет данные по символам новой строки -
функцию
bufio.ScanWords,
которая разделяет данные по пробельным символам