golang使用 gzip压缩

这个例子中使用gzip压缩格式,标准库还支持zlib, bz2, flate, lzw

压缩处理_三步:

1.创建压缩文件
2.gzip write包装
3.写入数据
    outputFile, _ := os.Create("G:/test.gz")
gzipWriter := gzip.NewWriter(outputFile) //gzipWriter:需要操作的句柄
defer gzipWriter.Close()
//写入gizp writer数据时,它会依次压缩数据并写入到底层的文件中
gzipWriter.Write([]byte("hello world!\n"))
log.Println("success")
解压缩_三步:
1.打开压缩文件
2.gzip Read包装
3.往新文件copy
打开一个gzip文件,它的内容不是一个文件,而是一个内存流
gzipFile, _ := os.Open("G:/test.gz")
gzipReader, _ := gzip.NewReader(gzipFile)
defer gzipReader.Close()
outfileWriter, err := os.Create("G:/unzipped.txt")
if err != nil {
log.Fatal(err)
}
defer outfileWriter.Close()
// 复制内容
_, err = io.Copy(outfileWriter, gzipReader)
if err != nil {
log.Fatal(err)
}

 练习

package main

import (
"bufio"
"compress/gzip"
"fmt"
"io"
"log"
"os"
"time"
) var (
gzipWriter *gzip.Writer
file *os.File
err error
) func init() {
//初始化创建一个压缩文件
outputFile, err := os.Create("G:/test.txt.gz")
if err != nil {
log.Fatal(err)
}
gzipWriter = gzip.NewWriter(outputFile) //打开普通文件
file, err = os.Open("G:/demo2.txt")
if err != nil {
panic(err)
}
} func main() {
start := time.Now().UnixNano()
//压缩
compress()
gzipWriter.Close()
num := time.Now().UnixNano()
fmt.Println("压缩", num-start) //解压缩
unCompress()
end := time.Now().UnixNano()
fmt.Println("解压缩", end-num)
} //读取普通文件,写入压缩文件
func compress() {
reader := bufio.NewReader(file)
for {
s, e := reader.ReadString('\n')
if e == io.EOF {
break
}
// 写入gizp writer数据时,它会依次压缩数据并写入到底层的文件中。
_, err := gzipWriter.Write([]byte(s))
if err != nil {
log.Fatal(err)
}
}
} // 打开一个gzip文件,它的内容不是一个文件,而是一个内存流
func unCompress() {
gzipFile, err := os.Open("G:/test.txt.gz")
if err != nil {
log.Fatal(err)
}
gzipReader, err := gzip.NewReader(gzipFile)
if err == io.EOF {
return
}
defer gzipReader.Close()
//创建解压后文件
outfileWriter, err := os.Create("G:/unzipped.txt")
if err != nil {
log.Fatal(err)
}
defer outfileWriter.Close()
// copy 压缩包数据copy到普通文件中
_, err = io.Copy(outfileWriter, gzipReader)
if err != nil {
log.Fatal(err)
}
}

golang使用 gzip压缩的更多相关文章

  1. golang tar gzip 压缩,解压(含目录文件)

    tar是用于文件归档,gzip用于压缩.仅仅用tar的话,达不到压缩的目的.我们常见的tar.gz就是用gzip压缩生成的tar归档文件. go实现tar压缩与解压与zip类似,区别在于tar需要使用 ...

  2. ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩

    网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...

  3. GZIP压缩优化

    使用gzip优化web应用(filter实现) 相关知识: gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户 ...

  4. IIS7配置Gzip压缩 JS压强失败的原因

    开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在容易了许多,而且默认情况下就是启用GZip压缩的.如果没有,则可以再功能视图下找到“压缩”项,进入之后就会看到“静态内 ...

  5. Nginx 开启gzip 压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术. 经过gz ...

  6. gzip压缩及测试方法【转载】

    Nginx开启Gzip压缩大幅提高页面加载速度 http://www.veryhuo.com/a/view/51706.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文 ...

  7. IIS7.5打开GZip压缩,同时启用GZip压缩JS/CSS文件的设置方法[bubuko.com]

    IIS7.5或者IIS7.0开启GZip压缩方法:打开IIS,在右侧点击某个网站,在功能视图中的“IIS”区域,双击进入“压缩”,如图下图: 分别勾选“启用动态内容压缩”和“启用静态内容压缩”.这样最 ...

  8. Nginx -- Gzip 压缩功能作用

    1.对应的压缩参数说明# 开启gzip压缩功能gzip on; # 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取.默认值是0,不管页面多大都进行压缩,建 ...

  9. IIS7 启用GZip压缩

    GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...

随机推荐

  1. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  2. hadoop学习路线

    学习hadoop,首先我们要知道hadoop是什么? 说到底Hadoop只是一项分布式系统的工具,我们在学习的时候要理解分布式系统设计中的原则以及方法,只有这样才能以不变应万变.再一个就是一定要动手, ...

  3. 3D Math Keynote 2

    [3D Math Keynote 2] 1.方向(diretion),指的是前方朝向.方位(orientation),指的是head.pitch.roll. 2.欧拉角的缺点: 1)给定方位的表达式不 ...

  4. IoU

    IoU #include <cstdio> #include <algorithm> #define re(i,a,b) for(int i=a;i<=b;i++) us ...

  5. WMS程序部署

    UI部署UI-20190107-landor-修改什么BUG.JAR162\163 APP部署 外部JSP部署 备份META这个SCHEMA

  6. Hillstone防火墙sslvpn配置与使用

    1.山石的sslvpn称为Secure Connect VPN,即scvpn. 2.WEB界面登陆防火墙,“用户”,“AAA服务器”,新建用户: 3.定义源IP池 即用户通过sslvpn拨号成功后获取 ...

  7. wpf Binding 小记录

    1.后台属性绑定: Grid g = new Grid() { Width = 60, Height = 100 }; g.SetValue(Panel.ZIndexProperty, 10); // ...

  8. css去掉滚动条

    .main-layout-side::-webkit-scrollbar { display: none; } 主要代码: ::-webkit-scrollbar {display: none;}

  9. 【转】.NET程序员提高效率的70多个开发工具

    原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...

  10. java多线程管理 concurrent包用法详解

        我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量 ...