Ошибка bufio.ErrAdvanceTooFar
Ошибка bufio.ErrAdvanceTooFar возвращается методами
буферизованного чтения, когда запрошенный сдвиг (advance)
превышает размер буфера или доступных данных.
Этот тип ошибки определен в пакете bufio и возникает
при работе с bufio.Reader, когда методы пытаются
пропустить больше байт, чем доступно в текущем буфере.
Синтаксис
var ErrAdvanceTooFar = errors.New("bufio: advance too far")
Ошибка возвращается методами, которые принимают параметр
advance - количество байт для пропуска. Если это
значение больше размера буфера или превышает количество
непрочитанных байт, возникает ошибка.
Пример
Попытка пропустить больше байт, чем содержит буфер:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := strings.NewReader("abcde")
br := bufio.NewReader(r)
// Пытаемся пропустить 10 байт, хотя данных всего 5
_, err := br.Discard(10)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
"bufio: advance too far"
Пример
Обработка ошибки ErrAdvanceTooFar при чтении
с помощью метода Peek:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := strings.NewReader("hello")
br := bufio.NewReader(r)
// Пытаемся заглянуть на 20 байт вперед
buf, err := br.Peek(20)
if err != nil {
fmt.Println("Error:", err)
if err == bufio.ErrAdvanceTooFar {
fmt.Println("Advance size exceeds buffer limit")
}
} else {
fmt.Println(string(buf))
}
}
Результат выполнения кода:
"Error: bufio: advance too far"
"Advance size exceeds buffer limit"
Пример
Корректная обработка данных без ошибки при использовании правильного размера сдвига:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
r := strings.NewReader("12345")
br := bufio.NewReader(r)
// Пропускаем 3 байта (данных достаточно)
_, err := br.Discard(3)
if err != nil {
fmt.Println(err)
return
}
// Читаем оставшиеся данные
remaining, _ := br.ReadString('\n')
fmt.Println(remaining)
}
Результат выполнения кода:
"45"
Смотрите также
-
ошибку
bufio.ErrTooLong,
возникающую при превышении максимальной длины токена -
ошибку
bufio.ErrNegativeAdvance,
возникающую при отрицательном значении сдвига -
функцию
bufio.Reader.Discard,
которая пропускает указанное количество байт -
функцию
bufio.Reader.Peek,
которая возвращает данные без их чтения