example_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Copyright 2016 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package gzip_test
  5. import (
  6. "bytes"
  7. "compress/gzip"
  8. "fmt"
  9. "io"
  10. "log"
  11. "os"
  12. "time"
  13. )
  14. func Example_writerReader() {
  15. var buf bytes.Buffer
  16. zw := gzip.NewWriter(&buf)
  17. // Setting the Header fields is optional.
  18. zw.Name = "a-new-hope.txt"
  19. zw.Comment = "an epic space opera by George Lucas"
  20. zw.ModTime = time.Date(1977, time.May, 25, 0, 0, 0, 0, time.UTC)
  21. _, err := zw.Write([]byte("A long time ago in a galaxy far, far away..."))
  22. if err != nil {
  23. log.Fatal(err)
  24. }
  25. if err := zw.Close(); err != nil {
  26. log.Fatal(err)
  27. }
  28. zr, err := gzip.NewReader(&buf)
  29. if err != nil {
  30. log.Fatal(err)
  31. }
  32. fmt.Printf("Name: %s\nComment: %s\nModTime: %s\n\n", zr.Name, zr.Comment, zr.ModTime.UTC())
  33. if _, err := io.Copy(os.Stdout, zr); err != nil {
  34. log.Fatal(err)
  35. }
  36. if err := zr.Close(); err != nil {
  37. log.Fatal(err)
  38. }
  39. // Output:
  40. // Name: a-new-hope.txt
  41. // Comment: an epic space opera by George Lucas
  42. // ModTime: 1977-05-25 00:00:00 +0000 UTC
  43. //
  44. // A long time ago in a galaxy far, far away...
  45. }
  46. func ExampleReader_Multistream() {
  47. var buf bytes.Buffer
  48. zw := gzip.NewWriter(&buf)
  49. var files = []struct {
  50. name string
  51. comment string
  52. modTime time.Time
  53. data string
  54. }{
  55. {"file-1.txt", "file-header-1", time.Date(2006, time.February, 1, 3, 4, 5, 0, time.UTC), "Hello Gophers - 1"},
  56. {"file-2.txt", "file-header-2", time.Date(2007, time.March, 2, 4, 5, 6, 1, time.UTC), "Hello Gophers - 2"},
  57. }
  58. for _, file := range files {
  59. zw.Name = file.name
  60. zw.Comment = file.comment
  61. zw.ModTime = file.modTime
  62. if _, err := zw.Write([]byte(file.data)); err != nil {
  63. log.Fatal(err)
  64. }
  65. if err := zw.Close(); err != nil {
  66. log.Fatal(err)
  67. }
  68. zw.Reset(&buf)
  69. }
  70. zr, err := gzip.NewReader(&buf)
  71. if err != nil {
  72. log.Fatal(err)
  73. }
  74. for {
  75. zr.Multistream(false)
  76. fmt.Printf("Name: %s\nComment: %s\nModTime: %s\n\n", zr.Name, zr.Comment, zr.ModTime.UTC())
  77. if _, err := io.Copy(os.Stdout, zr); err != nil {
  78. log.Fatal(err)
  79. }
  80. fmt.Print("\n\n")
  81. err = zr.Reset(&buf)
  82. if err == io.EOF {
  83. break
  84. }
  85. if err != nil {
  86. log.Fatal(err)
  87. }
  88. }
  89. if err := zr.Close(); err != nil {
  90. log.Fatal(err)
  91. }
  92. // Output:
  93. // Name: file-1.txt
  94. // Comment: file-header-1
  95. // ModTime: 2006-02-01 03:04:05 +0000 UTC
  96. //
  97. // Hello Gophers - 1
  98. //
  99. // Name: file-2.txt
  100. // Comment: file-header-2
  101. // ModTime: 2007-03-02 04:05:06 +0000 UTC
  102. //
  103. // Hello Gophers - 2
  104. }