Метод 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,
которая предоставляет методы для сжатия данных