Тип bytes.Reader
Тип bytes.Reader реализует интерфейсы io.Reader,
io.ReaderAt, io.WriterTo, io.Seeker,
io.ByteReader и io.RuneReader. Он создается
с помощью функции bytes.NewReader, которая принимает срез байтов
и возвращает указатель на bytes.Reader.
Основное назначение типа — предоставить возможность читать данные из строки (преобразованной в байтовый срез) как из потока. Это удобно, когда требуется посимвольное или поблочное чтение, а также перемещение позиции чтения.
Синтаксис
r := bytes.NewReader([]byte("some string"))
Пример
Давайте создадим bytes.Reader из строки и прочитаем
из него данные в байтовый срез:
package main
import (
"bytes"
"fmt"
)
func main() {
data := []byte("abcde")
r := bytes.NewReader(data)
buf := make([]byte, 3)
n, err := r.Read(buf)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, buf[:n])
}
Результат выполнения кода:
"Read 3 bytes: abc"
Пример
Давайте используем метод Seek для перемещения позиции
чтения в середину строки и прочитаем остаток:
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
data := []byte("abcde")
r := bytes.NewReader(data)
// Перемещаем позицию на 2 байта от начала
_, err := r.Seek(2, io.SeekStart)
if err != nil {
fmt.Println("Error:", err)
return
}
buf := make([]byte, 3)
n, err := r.Read(buf)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Read %d bytes: %s\n", n, buf[:n])
}
Результат выполнения кода:
"Read 3 bytes: cde"
Пример
Давайте прочитаем всю строку целиком с помощью метода ReadAll
из пакета io, используя bytes.Reader как источник:
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
data := []byte("abcde")
r := bytes.NewReader(data)
res, err := io.ReadAll(r)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("%s\n", res)
}
Результат выполнения кода:
"abcde"
Смотрите также
-
тип
bytes.Buffer,
который используется для накопления данных в буфере -
функцию
bytes.NewReader,
которая создает новыйbytes.Readerиз среза байтов -
тип
strings.Reader,
который предоставляет аналогичную функциональность для строк -
функцию
bytes.Clone,
которая создает копию среза байтов