本文整理汇总了Golang中compress/gzip.Reader.Close方法的典型用法代码示例。如果您正苦于以下问题:Golang Reader.Close方法的具体用法?Golang Reader.Close怎么用?Golang Reader.Close使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类compress/gzip.Reader
的用法示例。
在下文中一共展示了Reader.Close方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: NewDscin
func NewDscin(waiter *sync.WaitGroup, filename string) *Dscin {
d := new(Dscin)
d.Operation.Waiter = waiter
d.Operation.Waiter.Add(1)
file, err := os.Open(filename)
if err != nil {
return nil
}
d.closer = func() {
file.Close()
}
var reader io.ReadCloser = file
var uncompressor *gzip.Reader
if strings.HasSuffix(filename, ".gz") {
uncompressor, err = gzip.NewReader(file)
d.closer = func() { uncompressor.Close(); file.Close() }
reader = uncompressor
}
uncompressed_name := strings.TrimRight(filename, ".gz")
switch {
case strings.HasSuffix(uncompressed_name, ".gob"):
d.marshaler = new(formats.GobMarshaler)
case strings.HasSuffix(uncompressed_name, ".xml"):
d.marshaler = new(formats.XmlMarshaler)
}
if d.marshaler != nil {
d.marshaler.ValidateFile(reader)
}
return d
}
示例2: handleAssets
func handleAssets(w http.ResponseWriter, r *http.Request) {
assets := auto.Assets()
path := r.URL.Path[1:]
if path == "" {
path = "index.html"
}
bs, ok := assets[path]
if !ok {
w.WriteHeader(http.StatusNotFound)
return
}
mtype := mimeTypeForFile(path)
if len(mtype) != 0 {
w.Header().Set("Content-Type", mtype)
}
if strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
w.Header().Set("Content-Encoding", "gzip")
} else {
// ungzip if browser not send gzip accepted header
var gr *gzip.Reader
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
gr.Close()
}
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(bs)))
w.Write(bs)
}
示例3: GetPage
// GetPage is an HTTP client that automatically decodes gzip when necessary.
func GetPage(url string) ([]byte, error) {
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.Header.Add("Accept-Encoding", "gzip, deflate")
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var body []byte
if resp.Header.Get("Content-Encoding") == "gzip" {
var gz *gzip.Reader
gz, err = gzip.NewReader(resp.Body)
if err != nil {
return nil, err
}
defer gz.Close()
body, err = ioutil.ReadAll(gz)
} else {
body, err = ioutil.ReadAll(resp.Body)
}
if err != nil {
return nil, err
}
return body, nil
}
示例4: ringOrBuilder
func ringOrBuilder(fileName string) (r ring.Ring, b *ring.Builder, err error) {
var f *os.File
if f, err = os.Open(fileName); err != nil {
return
}
var gf *gzip.Reader
if gf, err = gzip.NewReader(f); err != nil {
return
}
header := make([]byte, 16)
if _, err = io.ReadFull(gf, header); err != nil {
return
}
if string(header[:5]) == "RINGv" {
gf.Close()
if _, err = f.Seek(0, 0); err != nil {
return
}
r, err = ring.LoadRing(f)
} else if string(header[:12]) == "RINGBUILDERv" {
gf.Close()
if _, err = f.Seek(0, 0); err != nil {
return
}
b, err = ring.LoadBuilder(f)
}
return
}
示例5: readBytes
// readBytes reads an encrypted/compressed steam from an io.Reader
// and returns a decoded byte slice
func readBytes(in io.Reader, key string) ([]byte, error) {
var gzReader *gzip.Reader // compressed reader
var iv [aes.BlockSize]byte // initialization vector
var cb cipher.Block // cipher block interface
var outBytes *bytes.Buffer // output buffer
var err error // general error handler
// init cipher block
if cb, err = aes.NewCipher(hashKey(key)); err != nil {
return nil, err
}
// init encrypted reader
encReader := &cipher.StreamReader{
S: cipher.NewOFB(cb, iv[:]),
R: in,
}
// wrap encrypted reader
if gzReader, err = gzip.NewReader(encReader); err != nil {
return nil, err
}
// close when done
defer gzReader.Close()
// init output
outBytes = new(bytes.Buffer)
// read data into output buffer decompressing and decrypting along the way
_, err = io.Copy(outBytes, gzReader)
// return bytes and last error state
return outBytes.Bytes(), err
}
示例6: Decode
// Decode returns the decoded data for the bundle entry. Returns a
// slice of bytes with the decoded, decompressed (if required), ready
// to use entry data, and an error indication which is not-nil if the
// data cannot be decoded. If argument "flag" is NODC, and the entry
// data are compressed (Entry.Gzip == true), Decode will not
// decompress the data it returns (it will only decode them). In most
// cases it is preferable to use the Reader interface instead of
// calling Decode.
func (e *Entry) Decode(flag int) ([]byte, error) {
var rs *strings.Reader
var r64 io.Reader
var rz *gzip.Reader
var buf *bytes.Buffer
var err error
rs = strings.NewReader(e.Data)
r64 = base64.NewDecoder(base64.StdEncoding, rs)
if e.Gzip && (flag&NODC == 0) {
rz, err = gzip.NewReader(r64)
if err != nil {
return nil, err
}
defer rz.Close()
} else {
rz = nil
}
buf = new(bytes.Buffer)
if rz != nil {
_, err = io.Copy(buf, rz)
} else {
_, err = io.Copy(buf, r64)
}
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
示例7: readChunkedData
// Reads transfer-encoding: chunked payloads from the connection reader.
func (c *Connection) readChunkedData() error {
var err error
var line []byte
var size uint64
var start time.Time
start = time.Now()
writer := &nonEmptyWriter{os.Stdout}
var buffer *bytes.Buffer
var decompressor *gzip.Reader
var zipReader *bufio.Reader
var data []byte
if c.conf.GZip == true {
buffer = bytes.NewBufferString("")
}
for err == nil {
line, _, err = c.reader.ReadLine()
if err != nil {
return err
}
size, err = decodeHexString(line)
if err != nil {
str := fmt.Sprintf("Expected hex, got %v", string(line))
return errors.New(str)
}
if c.conf.GZip == false {
_, err = io.CopyN(writer, c.reader, int64(size))
} else {
_, err = io.CopyN(buffer, c.reader, int64(size))
if err != nil {
return err
}
if decompressor == nil {
decompressor, err = gzip.NewReader(buffer)
defer decompressor.Close()
if err != nil {
return err
}
zipReader = bufio.NewReader(decompressor)
}
data = make([]byte, 512, 512)
_, err = zipReader.Read(data)
if err != nil {
return err
}
strBuffer := bytes.NewBuffer(data)
io.CopyN(writer, strBuffer, int64(len(data)))
}
if c.conf.TTL > 0 {
if time.Now().Sub(start).Nanoseconds() > c.conf.TTL {
return nil
}
}
}
return err
}
示例8: ServeHTTP
func (s embeddedStatic) ServeHTTP(w http.ResponseWriter, r *http.Request) {
file := r.URL.Path
if file[0] == '/' {
file = file[1:]
}
if len(file) == 0 {
file = "index.html"
}
if s.assetDir != "" {
p := filepath.Join(s.assetDir, filepath.FromSlash(file))
_, err := os.Stat(p)
if err == nil {
http.ServeFile(w, r, p)
return
}
}
s.mut.RLock()
theme := s.theme
modified := s.lastModified
s.mut.RUnlock()
bs, ok := s.assets[theme+"/"+file]
if !ok {
bs, ok = s.assets[config.DefaultTheme+"/"+file]
if !ok {
http.NotFound(w, r)
return
}
}
if modifiedSince, err := time.Parse(r.Header.Get("If-Modified-Since"), http.TimeFormat); err == nil && modified.Before(modifiedSince) {
w.WriteHeader(http.StatusNotModified)
return
}
mtype := s.mimeTypeForFile(file)
if len(mtype) != 0 {
w.Header().Set("Content-Type", mtype)
}
if strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
w.Header().Set("Content-Encoding", "gzip")
} else {
// ungzip if browser not send gzip accepted header
var gr *gzip.Reader
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
gr.Close()
}
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(bs)))
w.Header().Set("Last-Modified", modified.Format(http.TimeFormat))
w.Header().Set("Cache-Control", "public")
w.Write(bs)
}
示例9: extractControlFromIpk
// extract 'control' file from 'reader'. the contents of a 'control' file
// is a set of key-value pairs as described in
// https://www.debian.org/doc/debian-policy/ch-controlfields.html
func extractControlFromIpk(reader io.Reader) (string, error) {
var (
arReader *ar.Reader
tarReader *tar.Reader
gzReader *gzip.Reader
)
arReader = ar.NewReader(reader)
for {
header, err := arReader.Next()
if err != nil && err != io.EOF {
return "", fmt.Errorf("extracting contents: %v", err)
} else if header == nil {
break
}
// NOTE: strangeley the name of the files end with a "/" ... content error?
if header.Name == "control.tar.gz/" || header.Name == "control.tar.gz" {
gzReader, err = gzip.NewReader(arReader)
if err != nil {
return "", fmt.Errorf("analyzing control.tar.gz: %v", err)
}
break
}
}
if gzReader == nil {
return "", fmt.Errorf("missing control.tar.gz entry")
}
defer gzReader.Close()
buffer := bytes.NewBuffer(nil)
tarReader = tar.NewReader(gzReader)
for {
header, err := tarReader.Next()
if err != nil && err != io.EOF {
return "", fmt.Errorf("extracting control.tar.gz: %v", err)
} else if header == nil {
break
}
if header.Name != "./control" {
continue
}
io.Copy(buffer, tarReader)
break
}
if buffer.Len() == 0 {
return "", fmt.Errorf("missing or empty 'control' file inside 'control.tar.gz'")
}
return buffer.String(), nil
}
示例10: ServeHTTP
func (s embeddedStatic) ServeHTTP(w http.ResponseWriter, r *http.Request) {
file := r.URL.Path
if file[0] == '/' {
file = file[1:]
}
if len(file) == 0 {
file = "index.html"
}
if s.assetDir != "" {
p := filepath.Join(s.assetDir, filepath.FromSlash(file))
_, err := os.Stat(p)
if err == nil {
http.ServeFile(w, r, p)
return
}
}
bs, ok := s.assets[file]
if !ok {
http.NotFound(w, r)
return
}
if r.Header.Get("If-Modified-Since") == auto.AssetsBuildDate {
w.WriteHeader(http.StatusNotModified)
return
}
mtype := s.mimeTypeForFile(file)
if len(mtype) != 0 {
w.Header().Set("Content-Type", mtype)
}
if strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") {
w.Header().Set("Content-Encoding", "gzip")
} else {
// ungzip if browser not send gzip accepted header
var gr *gzip.Reader
gr, _ = gzip.NewReader(bytes.NewReader(bs))
bs, _ = ioutil.ReadAll(gr)
gr.Close()
}
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(bs)))
w.Header().Set("Last-Modified", auto.AssetsBuildDate)
w.Header().Set("Cache-Control", "public")
w.Write(bs)
}
示例11: openInvoiceFile
func openInvoiceFile(filename string) (io.ReadCloser, func(), error) {
file, err := os.Open(filename)
if err != nil {
return nil, nil, err
}
closer := func() { file.Close() }
var reader io.ReadCloser = file
var decompressor *gzip.Reader
if strings.HasSuffix(filename, ".gz") {
if decompressor, err = gzip.NewReader(file); err != nil {
return file, closer, err
}
closer = func() { decompressor.Close(); file.Close() }
reader = decompressor
}
return reader, closer, nil
}
示例12: readTheThings
func readTheThings() {
file_r_handle, _ := os.OpenFile("testing/testfile.tar.gz", os.O_RDWR, os.ModePerm)
defer file_r_handle.Close()
var zip_r_handle *gzip.Reader
var err error
if zip_r_handle, err = gzip.NewReader(file_r_handle); err != nil {
return
}
defer zip_r_handle.Close()
tar_r_handle := tar.NewReader(zip_r_handle)
tar_r_handle.Next()
/*
for header, err := tar_r_handle.Next(); err == nil; tar_r_handle.Next() {
fmt.Printf("File handle: %s\n", header.Name)
}
*/
}
示例13: NewDscin
func NewDscin(filename string) *Dscin {
d := new(Dscin)
file, err := os.Open(filename)
if err != nil {
return nil
}
d.closer = func() {
fmt.Printf("closing file %s\n", filename)
file.Close()
}
var reader io.ReadCloser = file
var decompressor *gzip.Reader
if strings.HasSuffix(filename, ".gz") {
decompressor, _ = gzip.NewReader(file)
d.closer = func() { decompressor.Close(); file.Close() }
reader = decompressor
}
d.marshaler = formats.GobMarshaler{}
d.marshaler.ValidateFile(reader)
return d
}
示例14: main
func main() {
var file *os.File
var err error
var reader *gzip.Reader
if file, err = os.Open("output/sample.tar.gz"); err != nil {
log.Fatalln(err)
}
defer file.Close()
if reader, err = gzip.NewReader(file); err != nil {
log.Fatalln(err)
}
defer reader.Close()
tr := tar.NewReader(reader)
var header *tar.Header
for {
header, err = tr.Next()
if err == io.EOF {
// ファイルの最後
break
}
if err != nil {
log.Fatalln(err)
}
buf := new(bytes.Buffer)
if _, err = io.Copy(buf, tr); err != nil {
log.Fatalln(err)
}
if err = ioutil.WriteFile("output/"+header.Name, buf.Bytes(), 0755); err != nil {
log.Fatal(err)
}
}
}
示例15: openTarGz
// deal with .tar.gz
func openTarGz(za *ZipAssets) (err error) {
var (
f *os.File
tr *tar.Reader
gr *gzip.Reader
)
if f, err = os.Open(za.path); err != nil {
return
}
defer f.Close()
if gr, err = gzip.NewReader(f); err != nil {
return
}
defer gr.Close()
tr = tar.NewReader(gr)
err = openTar(za, tr)
return
}