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. MongoDB主从复制和副本集

    MongoDB有主从复制和副本集两种主从复制模式,主从复制最大的问题就是无法自动故障转移,MongoDB副本集解决了主从模式无法自动故障转义的特点,因此是复制的首选.对于简单的主从复制无法自动故障转移 ...

  2. Filter过滤器 不登陆无法访问其他页面

    package com.cscy.Filter; import java.io.IOException; import javax.servlet.Filter; import javax.servl ...

  3. Mac 下安装nvm 后vscode 输入node -v 不起作用

    今天下午,我因为要安装不同的node版本,所有安装了nvm下载了两个不同版本的node,并且配置了环境变量. 在命令行窗口中使用起来没有任何问题,但是在vs code中敲的时候node -v 显示no ...

  4. python中os模块操作目录与文件名小结

    (1). 创建目录: SigleDir = 'sigle_layer' MultiDir = 'D:\\Web\\multi_layer' 创建单层目录: os.mkdir(SigleDir) 创建多 ...

  5. cf1047C-Enlarge GCD-(欧拉筛+map+gcd+唯一分解定理)

    https://vjudge.net/problem/CodeForces-1047C 题意:有n个数,他们有个最大公约数设为maxxgcd,要删去一些数,使得剩下的数的gcd大于maxxgcd. 解 ...

  6. haproxy监控页面添加及参数简介(转)

    环境: [root@localhost 13:55:31 haproxy]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@loca ...

  7. Python数据分析学习(二):Numpy数组对象基础

    1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  8. TreeView的三种状态,全选,全不选,半选中

    我知道的设置treeview节点的三种状态,如果不是买的控件,那么通过代码,只能设置两种状态,我知道的有三种方法, 第一种是重写treeview,第二种是把三种状态做成小图标,让节点复选框随着不同的状 ...

  9. c#Dapper mysql按时间段查询和过滤

    #endregion /// <summary> /// 根据条件获取集合 /// </summary> /// <param name="id"&g ...

  10. centos7 安装mysql5.7.20(yum方式)

    windows下安装mysql请访问:windows下mysql5.7.20安装(zip包方式) 一.安装过程 1.安装wget yum install wget 2.查找yum源名称 在mysql官 ...