Метод bufio.Reader.Buffered
Метод bufio.Reader.Buffered возвращает количество байт,
которые в данный момент находятся во внутреннем буфере
читателя и готовы к чтению без обращения к нижележащему
источнику данных. Этот метод не требует передачи
параметров и возвращает значение типа int,
равное количеству байт в буфере.
Синтаксис
reader.Buffered()
Метод возвращает количество непрочитанных байт в буфере. Если в буфере нет данных, возвращается 0.
Пример
Создадим буферизированный читатель из строки и прочитаем из нее несколько байт, после чего проверим, сколько байт осталось в буфере:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
str := "Hello, World!"
reader := bufio.NewReader(strings.NewReader(str))
b := make([]byte, 5)
reader.Read(b)
buffered := reader.Buffered()
fmt.Println(buffered)
}
Результат выполнения кода:
8
В исходной строке "Hello, World!" содержится 13 байт. После чтения 5 байт (символы "Hello") в буфере осталось 8 байт, что и было возвращено методом.
Пример
Рассмотрим ситуацию, когда буфер пуст. Если мы прочитаем все данные из буфера, то метод вернет 0:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
str := "abcde"
reader := bufio.NewReader(strings.NewReader(str))
buffered := reader.Buffered()
fmt.Println(buffered)
b := make([]byte, 10)
reader.Read(b)
bufferedAfter := reader.Buffered()
fmt.Println(bufferedAfter)
}
Результат выполнения кода:
5
0
Изначально в буфере находится вся строка "abcde" длиной 5 байт. После чтения всех данных буфер становится пустым, и метод возвращает 0.
Пример
Метод Buffered может быть полезен при работе с
буферизированным чтением для контроля состояния буфера,
например, для проверки наличия данных перед чтением:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
str := "12345"
reader := bufio.NewReader(strings.NewReader(str))
for reader.Buffered() > 0 {
b := make([]byte, 2)
n, _ := reader.Read(b)
fmt.Printf("Прочитано %d байт: %s\n", n, b[:n])
fmt.Printf("Осталось в буфере: %d\n", reader.Buffered())
}
}
Результат выполнения кода:
"Прочитано 2 байт: 12"
"Осталось в буфере: 3"
"Прочитано 2 байт: 34"
"Осталось в буфере: 1"
"Прочитано 1 байт: 5"
"Осталось в буфере: 0"
Смотрите также
-
метод
bufio.Reader.Peek,
который позволяет просмотреть данные в буфере без их чтения -
метод
bufio.Reader.Discard,
который позволяет пропустить указанное количество байт из буфера -
метод
bufio.Reader.ReadString,
который читает данные до разделителя -
метод
bufio.Writer.Available,
который возвращает количество свободного места в буфере записи