如果"关闭"足够,为什么你需要`Flush`?

Pra*_*are 3 go

这就是我使用gzip writer的方式.

    var b bytes.Buffer
    gz := gzip.NewWriter(&b)

    if _, err := gz.Write([]byte(data)); err != nil {
        panic(err)
    }

    /* 
    if err := gz.Flush(); err != nil {
        panic(err)
    }
    */

    if err := gz.Close(); err != nil {
        panic(err)
    }
Run Code Online (Sandbox Code Playgroud)

游乐场链接https://play.golang.org/p/oafHItGOlDN

很明显,Flush + Close只是Close给出了不同的结果.

compress/gzip软件包的文件说:

func(z*Writer)Close()错误

Close通过将任何未写入的数据刷新到底层的io.Writer并写入GZIP页脚来关闭Writer.它不会关闭底层的io.Writer.

这个医生在谈论什么潮红?Flush如果Close足够的话,为什么你需要功能呢?为什么不Close打电话Flush

hob*_*bbs 7

关闭确实会引发冲洗.当你调用Flush然后Close,流被刷新两次,这导致输出一个额外的块,它使用5个字节来编码0字节的数据.两个流都编码相同的数据,但其中一个是浪费的.

至于为何使用Flush,解释就在Flush的文档中.有时您没有完成写作,但是您需要确保在其他数据可用之前,客户端可以读取您此时编写的所有数据.在这些点,您刷新流.只有在没有更多数据时才会关闭.