zoukankan      html  css  js  c++  java
  • Node.js压缩与解压数据

    Node.js中提供了一个很好的库Zlib来压缩解压数据。

    一、压缩缓冲区

    Zlib中有下面几个函数方便解压缩缓冲区.

    gzip/gunzip:标准gzip压缩.

    deflate/inflate:基于Huffman编码的标准deflate压缩算法。

    deflateRaw/inflateRaw:针对原始缓冲区的deflate压缩算法。

    它们的函数都是function(buffer,callback).

    var zlib = require("zlib");
    var input = '...............text...............';
    zlib.deflate(input, function(err, buffer) {
      if (!err) {
        console.log("deflate (%s): ", buffer.length, buffer.toString('base64'));
        zlib.inflate(buffer, function(err, buffer) {
          if (!err) {
            console.log("inflate (%s): ", buffer.length, buffer.toString());
          }
        });
        zlib.unzip(buffer, function(err, buffer) {
          if (!err) {
            console.log("unzip deflate (%s): ", buffer.length, buffer.toString());
          }
        });
      }
    });
    
    zlib.deflateRaw(input, function(err, buffer) {
      if (!err) {
        console.log("deflateRaw (%s): ", buffer.length, buffer.toString('base64'));
        zlib.inflateRaw(buffer, function(err, buffer) {
          if (!err) {
            console.log("inflateRaw (%s): ", buffer.length, buffer.toString());
          }
        });
      }
    });
    
    zlib.gzip(input, function(err, buffer) {
      if (!err) {
        console.log("gzip (%s): ", buffer.length, buffer.toString('base64'));
        zlib.gunzip(buffer, function(err, buffer) {
          if (!err) {
            console.log("gunzip (%s): ", buffer.length, buffer.toString());
          }
        });
        zlib.unzip(buffer, function(err, buffer) {
          if (!err) {
            console.log("unzip gzip (%s): ", buffer.length, buffer.toString());
          }
        });
      }
    });
    "C:Program Files (x86)JetBrainsWebStorm 11.0.3in
    unnerw.exe" F:
    odejs
    ode.exe zlib_buffers.js
    deflate (18):  eJzT00MBJakVJagiegB9Zgcq
    deflateRaw (12):  09NDASWpFSWoInoA
    gzip (30):  H4sIAAAAAAAAC9PTQwElqRUlqCJ6AIq+x+AiAAAA
    inflate (34):  ...............text...............
    unzip deflate (34):  ...............text...............
    inflateRaw (34):  ...............text...............
    gunzip (34):  ...............text...............
    unzip gzip (34):  ...............text...............
    
    Process finished with exit code 0

    二、压缩文件

    可通过pipe()将压缩/解压对象从一个流输送到另一个流。

    var zlib = require("zlib");
    var gzip = zlib.createGzip();
    var fs = require('fs');
    var inFile = fs.createReadStream('zlib_file.js');
    var outFile = fs.createWriteStream('zlib_file.gz');
    inFile.pipe(gzip).pipe(outFile);
    setTimeout(function(){
      var gunzip = zlib.createUnzip({flush: zlib.Z_FULL_FLUSH});
      var inFile = fs.createReadStream('zlib_file.gz');
      var outFile = fs.createWriteStream('zlib_file.unzipped');
      inFile.pipe(gunzip).pipe(outFile);
    }, 3000);

    上面代码中前面是readable流通过pipe使用压缩zlib.createGzip()然后输出到writeable中。后面的是解压的过程。

  • 相关阅读:
    异地主从双机热备份实战
    基于Crawler4j的WEB爬虫
    【转】TCP拥塞控制
    js定时器setTimeout和setInterval的使用
    制作 macOS Sierra U盘USB启动安装盘方法教程 (亲测)
    VMware 14 安装 macOS10.13 详细图文教程
    解决多线程下@Autowired无法注入
    MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
    关于MYSQL
    关于Mybaits
  • 原文地址:https://www.cnblogs.com/5ishare/p/5313453.html
Copyright © 2011-2022 走看看