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

Метод gzip.Writer.Flush

Метод gzip.Writer.Flush принудительно записывает все сжатые данные, накопленные в буфере, в нижележащий поток io.Writer. После вызова метода все данные, переданные через Write, будут немедленно сжаты и записаны. Метод не закрывает поток, а только сбрасывает буфер. Возвращает ошибку, если запись в нижележащий поток завершилась неудачей.

Синтаксис

err := writer.Flush()

Пример

Давайте создадим gzip-писатель и запишем данные с принудительным сбросом:

package main import ( "bytes" "compress/gzip" "fmt" "os" ) func main() { var buf bytes.Buffer gw := gzip.NewWriter(&buf) data := []byte("Hello, World!") if _, err := gw.Write(data); err != nil { fmt.Printf("write error: %v\n", err) os.Exit(1) } if err := gw.Flush(); err != nil { fmt.Printf("flush error: %v\n", err) os.Exit(1) } fmt.Printf("compressed data size: %d bytes\n", buf.Len()) if err := gw.Close(); err != nil { fmt.Printf("close error: %v\n", err) os.Exit(1) } }

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

"compressed data size: 32 bytes"

Пример

Давайте проверим поведение метода при записи больших объемов данных:

package main import ( "bytes" "compress/gzip" "fmt" "os" ) func main() { var buf bytes.Buffer gw := gzip.NewWriter(&buf) // пишем много данных for i := 0; i < 1000; i++ { if _, err := gw.Write([]byte("data")); err != nil { fmt.Printf("write error: %v\n", err) os.Exit(1) } } // сбрасываем все данные if err := gw.Flush(); err != nil { fmt.Printf("flush error: %v\n", err) os.Exit(1) } fmt.Printf("data size after flush: %d bytes\n", buf.Len()) if err := gw.Close(); err != nil { fmt.Printf("close error: %v\n", err) os.Exit(1) } }

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

"data size after flush: 45 bytes"

Пример

Давайте посмотрим, как метод работает с закрытым писателем:

package main import ( "bytes" "compress/gzip" "fmt" "os" ) func main() { var buf bytes.Buffer gw := gzip.NewWriter(&buf) if _, err := gw.Write([]byte("test")); err != nil { fmt.Printf("write error: %v\n", err) os.Exit(1) } if err := gw.Close(); err != nil { fmt.Printf("close error: %v\n", err) os.Exit(1) } if err := gw.Flush(); err != nil { fmt.Printf("flush error: %v\n", err) os.Exit(1) } }

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

"flush error: compress/gzip: writer is closed"

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

  • метод gzip.Writer.Close,
    который завершает запись и закрывает писатель
  • функцию gzip.NewWriter,
    которая создает новый gzip-писатель
  • функцию gzip.NewWriterLevel,
    которая создает писатель с заданным уровнем сжатия
  • структуру gzip.Writer,
    которая предоставляет методы для сжатия данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить