Go中的透明(类似于过滤器)gzip / gunzip

西里廷加

我只是出于娱乐目的,尝试将gzip Writer直接连接到gzip Reader,以便我可以写入Writer并即时从Reader中读取内容。我希望能准确阅读我写的东西。我正在使用gzip,但我想也将这种方法与crypto / aes一起使用,我想它应该工作得非常相似,并且可以与jpeg,png等其他读取器/写入器一起使用...

这是我最好的选择,它不起作用,但是希望您能明白我的意思:http : //play.golang.org/p/7qdUi9wwG7

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
)

func main() {
    s := []byte("Hello world!")
    fmt.Printf("%s\n", s)

    var b bytes.Buffer

    gz := gzip.NewWriter(&b)
    ungz, err := gzip.NewReader(&b)
    fmt.Println("err: ", err)

    gz.Write(s)
    gz.Flush()
    uncomp := make([]byte, 100)
    n, err2 := ungz.Read(uncomp)
    fmt.Println("err2: ", err2)
    fmt.Println("n: ", n)
    uncomp = uncomp[:n]
    fmt.Printf("%s\n", uncomp)
}

似乎gzip.NewReader(&b)正在尝试立即读取并返回了EOF。

尼克·克雷格·伍德

您需要做两件事才能使其正常工作

  1. 使用io.Pipe将读取器和写入器连接在一起-无法从同一缓冲区读取和写入
  2. 在单独的goroutine中运行读取和写入。因为gzip要做的第一件事就是尝试读取标头,否则除非您有另一个尝试写该标头的go例程,否则它将获得死锁。

这是看起来像

操场

func main() {
    s := []byte("Hello world!")
    fmt.Printf("%s\n", s)

    in, out := io.Pipe()

    gz := gzip.NewWriter(out)
    go func() {
        ungz, err := gzip.NewReader(in)
        fmt.Println("err: ", err)
        uncomp := make([]byte, 100)
        n, err2 := ungz.Read(uncomp)
        fmt.Println("err2: ", err2)
        fmt.Println("n: ", n)
        uncomp = uncomp[:n]
        fmt.Printf("%s\n", uncomp)
    }()
    gz.Write(s)
    gz.Flush()    
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails:实施类似于Amazon.com的搜索/过滤器

来自分类Dev

Jetty GZIP过滤器

来自分类Dev

gunzip即使知道文件名也找不到文件

来自分类Dev

PHP MySQL变量过滤器-“ AND”的行为类似于“ OR”

来自分类Dev

GUnzip部分文件时,如何避免zlib“文件末尾”?

来自分类Dev

如何在Node.js中对流进行Gunzip?

来自分类Dev

gunzip -tv报告“忽略了6个字节的额外字段”

来自分类Dev

过滤器中类似SQL的注入

来自分类Dev

Bash Gunzip错误

来自分类Dev

gunzip和unzip有什么区别?

来自分类Dev

在系统利用率方面,gunzip -c和gunzip之间有区别吗?

来自分类Dev

在文件范围内使用Gunzip

来自分类Dev

用管道将Gunzip和mysql用Gunzip压缩转储并将其导入

来自分类Dev

如何在带有curl的管道中使用gzip或gunzip(适用于二进制gz文件)

来自分类Dev

来自stdin的gunzip

来自分类Dev

gunzip多个文件

来自分类Dev

有文件tempfile2.gz(通过文件命令检查),但gunzip / gzip -d不起作用

来自分类Dev

gzip:stdin:当gunzip与管道一起使用时,不是gzip格式

来自分类Dev

无法使用gunzip解压缩.tgz

来自分类Dev

在MVC动作过滤器中获取类似于webapi的动作参数

来自分类Dev

验证Gunzip减压

来自分类Dev

Excel表过滤器实现了类似于SQL语言中的IN语句

来自分类Dev

如何在Node.js中对流进行Gunzip?

来自分类Dev

perl gunzip的缓冲区和gunzip的文件具有不同的字节顺序

来自分类Dev

GNU parallel + gunzip(或7z或bsdtar或解压缩):将每个“ archivename.zip”解压缩到(将要创建)其“ archivename”子文件夹中

来自分类Dev

如何像 Mac OS 的 gunzip 那样解压从 Python3 中的 SFTP 中提取的 GZIP 文件?

来自分类Dev

Ansible gzip 和 gunzip 数据文件

来自分类Dev

使用类似于 sql 的正则表达式的搜索过滤器 Like 'a%'

来自分类Dev

将结果传递给 PowerShell 中的类似过滤器

Related 相关文章

  1. 1

    Rails:实施类似于Amazon.com的搜索/过滤器

  2. 2

    Jetty GZIP过滤器

  3. 3

    gunzip即使知道文件名也找不到文件

  4. 4

    PHP MySQL变量过滤器-“ AND”的行为类似于“ OR”

  5. 5

    GUnzip部分文件时,如何避免zlib“文件末尾”?

  6. 6

    如何在Node.js中对流进行Gunzip?

  7. 7

    gunzip -tv报告“忽略了6个字节的额外字段”

  8. 8

    过滤器中类似SQL的注入

  9. 9

    Bash Gunzip错误

  10. 10

    gunzip和unzip有什么区别?

  11. 11

    在系统利用率方面,gunzip -c和gunzip之间有区别吗?

  12. 12

    在文件范围内使用Gunzip

  13. 13

    用管道将Gunzip和mysql用Gunzip压缩转储并将其导入

  14. 14

    如何在带有curl的管道中使用gzip或gunzip(适用于二进制gz文件)

  15. 15

    来自stdin的gunzip

  16. 16

    gunzip多个文件

  17. 17

    有文件tempfile2.gz(通过文件命令检查),但gunzip / gzip -d不起作用

  18. 18

    gzip:stdin:当gunzip与管道一起使用时,不是gzip格式

  19. 19

    无法使用gunzip解压缩.tgz

  20. 20

    在MVC动作过滤器中获取类似于webapi的动作参数

  21. 21

    验证Gunzip减压

  22. 22

    Excel表过滤器实现了类似于SQL语言中的IN语句

  23. 23

    如何在Node.js中对流进行Gunzip?

  24. 24

    perl gunzip的缓冲区和gunzip的文件具有不同的字节顺序

  25. 25

    GNU parallel + gunzip(或7z或bsdtar或解压缩):将每个“ archivename.zip”解压缩到(将要创建)其“ archivename”子文件夹中

  26. 26

    如何像 Mac OS 的 gunzip 那样解压从 Python3 中的 SFTP 中提取的 GZIP 文件?

  27. 27

    Ansible gzip 和 gunzip 数据文件

  28. 28

    使用类似于 sql 的正则表达式的搜索过滤器 Like 'a%'

  29. 29

    将结果传递给 PowerShell 中的类似过滤器

热门标签

归档