Метод bufio.Reader.Read
Метод bufio.Reader.Read считывает данные из буферизованного
ридера и помещает их в переданный байтовый слайс. В первый параметр
метод принимает байтовый слайс []byte, в который будут
записаны прочитанные данные. Метод возвращает количество
прочитанных байт int и ошибку error. При достижении
конца данных возвращается ошибка io.EOF.
Синтаксис
n, err := r.Read(p []byte)
Пример
Давайте создадим буферизованный ридер и прочитаем из него
строку с помощью метода Read:
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := "abcde"
r := bufio.NewReader(strings.NewReader(s))
buf := make([]byte, 3)
n, err := r.Read(buf)
fmt.Printf("Read %d bytes: %q\n", n, buf[:n])
if err != nil {
fmt.Printf("Error: %v\n", err)
}
}
Результат выполнения кода:
Read 3 bytes: "abc"
Пример
Прочитаем данные из ридера в несколько вызовов метода
Read, пока не достигнем конца данных:
package main
import (
"bufio"
"fmt"
"io"
"strings"
)
func main() {
s := "12345"
r := bufio.NewReader(strings.NewReader(s))
buf := make([]byte, 2)
for {
n, err := r.Read(buf)
if err != nil {
if err == io.EOF {
fmt.Println("End of data reached")
break
}
fmt.Printf("Error: %v\n", err)
break
}
fmt.Printf("Read %d bytes: %q\n", n, buf[:n])
}
}
Результат выполнения кода:
Read 2 bytes: "12"
Read 2 bytes: "34"
Read 1 bytes: "5"
End of data reached
Пример
Пример чтения данных из файла с использованием метода
Read:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
fmt.Printf("Error opening file: %v\n", err)
return
}
defer file.Close()
r := bufio.NewReader(file)
buf := make([]byte, 10)
for {
n, err := r.Read(buf)
if n > 0 {
fmt.Print(string(buf[:n]))
}
if err != nil {
break
}
}
}
В этом примере мы открываем файл, создаем буферизованный ридер
и читаем данные порциями по 10 байт до тех пор, пока не
встретим ошибку (обычно это io.EOF).
Смотрите также
-
метод
bufio.Reader.ReadString,
который считывает данные до указанного разделителя -
метод
bufio.Reader.ReadBytes,
который считывает байты до указанного разделителя -
метод
bufio.Reader.Peek,
который позволяет заглянуть в буфер без считывания данных -
функцию
bufio.NewReader,
которая создает новый буферизованный ридер