РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
577 of 1593 menu

Функция io.CopyBuffer

Функция io.CopyBuffer копирует данные из io.Reader в io.Writer, используя предоставленный буфер. В первый параметр передается ридер (источник данных), во второй — райтер (приемник данных), а в третий — срез байтов (буфер), который будет использоваться для копирования. Функция возвращает количество скопированных байтов и ошибку. Если буфер равен nil, функция создает буфер стандартного размера.

Синтаксис

io.CopyBuffer(dst io.Writer, src io.Reader, buf []byte) (written int64, err error)

Пример

Давайте скопируем данные из строки в буфер с использованием пользовательского буфера размером 10 байт:

package main import ( "bytes" "fmt" "io" "strings" ) func main() { src := strings.NewReader("1234567890abcde") dst := &bytes.Buffer{} buf := make([]byte, 10) written, err := io.CopyBuffer(dst, src, buf) if err != nil { fmt.Println("Error:", err) } fmt.Println("Written bytes:", written) fmt.Println("Result:", dst.String()) }

Результат выполнения кода:

"Written bytes: 15" "Result: 1234567890abcde"

Пример

Давайте скопируем данные из файла в другой файл, используя буфер большего размера для повышения производительности:

package main import ( "fmt" "io" "os" ) func main() { src, err := os.Open("input.txt") if err != nil { fmt.Println("Error opening source:", err) return } defer src.Close() dst, err := os.Create("output.txt") if err != nil { fmt.Println("Error creating destination:", err) return } defer dst.Close() buf := make([]byte, 64*1024) // 64 KB buffer written, err := io.CopyBuffer(dst, src, buf) if err != nil { fmt.Println("Error copying:", err) } fmt.Println("Copied", written, "bytes") }

Если файлы существуют и доступны для чтения/записи, результат выполнения кода:

"Copied 1024 bytes"

Пример

Давайте используем io.CopyBuffer с нулевым буфером, чтобы увидеть, как функция создает собственный буфер:

package main import ( "bytes" "fmt" "io" "strings" ) func main() { src := strings.NewReader("abcde") dst := &bytes.Buffer{} written, err := io.CopyBuffer(dst, src, nil) if err != nil { fmt.Println("Error:", err) } fmt.Println("Written:", written) fmt.Println("Result:", dst.String()) }

Результат выполнения кода:

"Written: 5" "Result: abcde"

Смотрите также

  • функцию io.Copy,
    которая копирует данные с использованием стандартного буфера
  • функцию io.CopyN,
    которая копирует ровно указанное количество байт
  • интерфейс io.Reader,
    который представляет источник данных для чтения
  • интерфейс io.Writer,
    который представляет приемник данных для записи
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить