我就废话不多说了,大家还是直接看代码吧~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package main
// 引入所需包
import (
"os"
"compress/gzip"
"io/ioutil"
"fmt"
)
// gzip文件
var fn = "./113.200.251.66_1510825558_A6D39783B05943D8ACA64F397748CF1B_vdn.gz"
func main() {
println(fn)
// 打开本地gz格式压缩包
fr, err := os.Open(fn)
if err != nil {
panic(err)
} else {
println("open file success!")
}
// defer: 在函数退出时,执行关闭文件
defer fr.Close()
// 创建gzip文件读取对象
gr, err := gzip.NewReader(fr)
if err != nil {
panic(err)
}
// defer: 在函数退出时,执行关闭gzip对象
defer gr.Close()
// 读取gzip对象内容
rBuf, err := ioutil.ReadAll(gr)
if err != nil {
fmt.Println("[read gzip data err]: ", err)
}
// 以文本形式输出
fmt.Printf("%s\n", rBuf)
}
|
输出: ABCDEFG
补充:golang通过在线读取请求url返回的zip内部内容
访问url返回的zip包,怎么直接解析zip中的文件并获取文件中的信息呢?
以前都是用java语言做这些事情,今天闲来蛋疼,用golang也实现了一下,效果已经发布在我的公众号:j全家桶---激活码中。
引用了以下包:
1
2
3
4
5
6
7
8
|
"archive/zip"
"bufio"
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
|
1、通过http包内部方法,请求了需要访问的url,这次只是为了分享在线解析zip,所以地址就不写出来了。
2、读取字节流并新建一个读卡器指定读取大小,最好弄个延迟关闭流不然内存泄露那是必须的。
3、接下来就是获取zip中的信息,只需要遍历一下读取到的文件把数据取出来就行了
其实还是蛮简单的,只是golang语言用得少,对于流的操作也比较少所以写一个今天实现这个功能的总结,点滴积累厚积薄发!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/robertkun/article/details/78728616