當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


GO Reader.Multistream用法及代碼示例

GO語言"compress/gzip"包中"Reader.Multistream"類型的用法及代碼示例。

用法:

func(z *Reader) Multistream(ok bool)

Multistream 控製閱讀器是否支持多流文件。

如果啟用(默認),Reader 期望輸入是一係列單獨壓縮的數據流,每個數據流都有自己的標頭和尾標,以 EOF 結尾。效果是 gzip 壓縮文件序列的串聯被視為等同於序列串聯的 gzip。這是 gzip 閱讀器的標準行為。

調用 Multistream(false) 禁用此行為;在讀取區分單個 gzip 數據流或將 gzip 數據流與其他數據流混合的文件格式時,禁用該行為可能很有用。在這種模式下,當 Reader 到達數據流的末尾時,Read 返回 io.EOF。底層閱讀器必須實現 io ByteReader 才能保持在 gzip 流之後的位置。要開始下一個流,請調用 z.Reset(r),然後調用 z.Multistream(false)。如果沒有下一個流,z.Reset(r) 將返回 io.EOF。

例子:

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
    "io"
    "log"
    "os"
    "time"
)

func main() {
    var buf bytes.Buffer
    zw := gzip.NewWriter(&buf)

    var files = []struct {
        name    string
        comment string
        modTime time.Time
        data    string
    }{
        {"file-1.txt", "file-header-1", time.Date(2006, time.February, 1, 3, 4, 5, 0, time.UTC), "Hello Gophers - 1"},
        {"file-2.txt", "file-header-2", time.Date(2007, time.March, 2, 4, 5, 6, 1, time.UTC), "Hello Gophers - 2"},
    }

    for _, file := range files {
        zw.Name = file.name
        zw.Comment = file.comment
        zw.ModTime = file.modTime

        if _, err := zw.Write([]byte(file.data)); err != nil {
            log.Fatal(err)
        }

        if err := zw.Close(); err != nil {
            log.Fatal(err)
        }

        zw.Reset(&buf)
    }

    zr, err := gzip.NewReader(&buf)
    if err != nil {
        log.Fatal(err)
    }

    for {
        zr.Multistream(false)
        fmt.Printf("Name: %s\nComment: %s\nModTime: %s\n\n", zr.Name, zr.Comment, zr.ModTime.UTC())

        if _, err := io.Copy(os.Stdout, zr); err != nil {
            log.Fatal(err)
        }

        fmt.Print("\n\n")

        err = zr.Reset(&buf)
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }
    }

    if err := zr.Close(); err != nil {
        log.Fatal(err)
    }

}

輸出:

Name: file-1.txt
Comment: file-header-1
ModTime: 2006-02-01 03:04:05 +0000 UTC

Hello Gophers - 1

Name: file-2.txt
Comment: file-header-2
ModTime: 2007-03-02 04:05:06 +0000 UTC

Hello Gophers - 2

相關用法


注:本文由純淨天空篩選整理自golang.google.cn大神的英文原創作品 Reader.Multistream。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。