Метод bytes.Buffer.Read
Метод bytes.Buffer.Read читает данные из буфера и записывает их в переданный срез байт.
В качестве параметра метод принимает срез байт, в который будут скопированы данные из буфера.
Метод возвращает количество прочитанных байт и ошибку типа error.
Если буфер пуст, метод возвращает (0, io.EOF).
Если переданный срез имеет нулевую длину, чтение не производится и возвращается (0, nil).
Метод читает данные до заполнения среза или до опустошения буфера.
Синтаксис
buffer.Read(p []byte) (n int, err error)
Пример
Давайте создадим буфер со строкой и прочитаем из него данные в срез байт:
package main
import (
"bytes"
"fmt"
)
func main() {
buffer := bytes.NewBufferString("Hello")
slice := make([]byte, 3)
n, err := buffer.Read(slice)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, slice)
fmt.Printf("Remaining in buffer: %s\n", buffer.String())
}
Результат выполнения кода:
"Read 3 bytes: Hel"
"Remaining in buffer: lo"
Пример
Давайте попробуем прочитать данные из пустого буфера:
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
buffer := bytes.NewBufferString("")
slice := make([]byte, 5)
n, err := buffer.Read(slice)
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("Read %d bytes\n", n)
}
Результат выполнения кода:
"Error: EOF"
Пример
Прочитаем данные из буфера в срез, размер которого превышает содержимое буфера:
package main
import (
"bytes"
"fmt"
)
func main() {
buffer := bytes.NewBufferString("12345")
slice := make([]byte, 10)
n, err := buffer.Read(slice)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, slice[:n])
}
Результат выполнения кода:
"Read 5 bytes: 12345"
Смотрите также
-
метод
bytes.Buffer.WriteString,
который записывает строку в буфер -
метод
bytes.Buffer.Bytes,
который возвращает содержимое буфера в виде среза байт -
метод
bytes.Buffer.String,
который возвращает содержимое буфера в виде строки -
функцию
strings.NewReader,
которая создает читателя для строки