Source File
gzip.go
Belonging Package
compress/gzip
package gzip
import (
)
func ( io.Writer) *Writer {
, := NewWriterLevel(, DefaultCompression)
return
}
func ( io.Writer, int) (*Writer, error) {
if < HuffmanOnly || > BestCompression {
return nil, fmt.Errorf("gzip: invalid compression level: %d", )
}
:= new(Writer)
.init(, )
return , nil
}
func ( *Writer) ( io.Writer, int) {
:= .compressor
if != nil {
.Reset()
}
* = Writer{
Header: Header{
OS: 255, // unknown
},
w: ,
level: ,
compressor: ,
}
}
if !.wroteHeader {
.wroteHeader = true
.buf = [10]byte{0: gzipID1, 1: gzipID2, 2: gzipDeflate}
if .Extra != nil {
.buf[3] |= 0x04
}
if .Name != "" {
.buf[3] |= 0x08
}
if .Comment != "" {
.buf[3] |= 0x10
}
le.PutUint32(.buf[4:8], uint32(.ModTime.Unix()))
}
if .level == BestCompression {
.buf[8] = 2
} else if .level == BestSpeed {
.buf[8] = 4
}
.buf[9] = .OS
_, .err = .w.Write(.buf[:10])
if .err != nil {
return 0, .err
}
if .Extra != nil {
.err = .writeBytes(.Extra)
if .err != nil {
return 0, .err
}
}
if .Name != "" {
.err = .writeString(.Name)
if .err != nil {
return 0, .err
}
}
if .Comment != "" {
.err = .writeString(.Comment)
if .err != nil {
return 0, .err
}
}
if .compressor == nil {
.compressor, _ = flate.NewWriter(.w, .level)
}
}
.size += uint32(len())
.digest = crc32.Update(.digest, crc32.IEEETable, )
, .err = .compressor.Write()
return , .err
}
func ( *Writer) () error {
if .err != nil {
return .err
}
if .closed {
return nil
}
.closed = true
if !.wroteHeader {
.Write(nil)
if .err != nil {
return .err
}
}
.err = .compressor.Close()
if .err != nil {
return .err
}
le.PutUint32(.buf[:4], .digest)
le.PutUint32(.buf[4:8], .size)
_, .err = .w.Write(.buf[:8])
return .err
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |