<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 穩定度: 2 - 穩定 要獲取這個模塊,你可以通過: ~~~ var zlib = require('zlib'); ~~~ 它提供了`Gzip/Gunzip`,`Deflate/Inflate`和`DeflateRaw/InflateRaw`類的綁定。每個類都有相同的選項,并且都是可讀/可寫流。 #### 例子 可以通過將一個`fs.ReadStream`的數據導入一個`zlib`流,然后導入一個`fs.WriteStream`,來壓縮或解壓縮一個文件。 ~~~ var gzip = zlib.createGzip(); var fs = require('fs'); var inp = fs.createReadStream('input.txt'); var out = fs.createWriteStream('input.txt.gz'); inp.pipe(gzip).pipe(out); ~~~ 通過使用便捷方法,可以在一個步驟里完成壓縮或解壓縮數據。 ~~~ var input = '.................................'; zlib.deflate(input, function(err, buffer) { if (!err) { console.log(buffer.toString('base64')); } }); var buffer = new Buffer('eJzT0yMAAGTvBe8=', 'base64'); zlib.unzip(buffer, function(err, buffer) { if (!err) { console.log(buffer.toString()); } }); ~~~ 如果要在HTTP客戶端或服務器上使用這個模塊,在請求時需要帶上`accept-encoding`頭,在響應時需要帶上`content-encoding`頭。 注意,這些例子都只是非常簡單的展示了一些基本的概念。`zlib`編碼的開銷是非常昂貴的,并且結果需要被緩存。更多關于速度/內存/壓縮的權衡,請參閱下文的`內存使用調優`。 ~~~ // client request example var zlib = require('zlib'); var http = require('http'); var fs = require('fs'); var request = http.get({ host: 'izs.me', path: '/', port: 80, headers: { 'accept-encoding': 'gzip,deflate' } }); request.on('response', function(response) { var output = fs.createWriteStream('izs.me_index.html'); switch (response.headers['content-encoding']) { // or, just use zlib.createUnzip() to handle both cases case 'gzip': response.pipe(zlib.createGunzip()).pipe(output); break; case 'deflate': response.pipe(zlib.createInflate()).pipe(output); break; default: response.pipe(output); break; } }); // server example // Running a gzip operation on every request is quite expensive. // It would be much more efficient to cache the compressed buffer. var zlib = require('zlib'); var http = require('http'); var fs = require('fs'); http.createServer(function(request, response) { var raw = fs.createReadStream('index.html'); var acceptEncoding = request.headers['accept-encoding']; if (!acceptEncoding) { acceptEncoding = ''; } // Note: this is not a conformant accept-encoding parser. // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3 if (acceptEncoding.match(/\bdeflate\b/)) { response.writeHead(200, { 'content-encoding': 'deflate' }); raw.pipe(zlib.createDeflate()).pipe(response); } else if (acceptEncoding.match(/\bgzip\b/)) { response.writeHead(200, { 'content-encoding': 'gzip' }); raw.pipe(zlib.createGzip()).pipe(response); } else { response.writeHead(200, {}); raw.pipe(response); } }).listen(1337); ~~~ #### zlib.createGzip([options]) 根據一個`options`,返回一個新的`Gzip`對象。 #### zlib.createGunzip([options]) 根據一個`options`,返回一個新的`Gunzip`對象。 #### zlib.createDeflate([options]) 根據一個`options`,返回一個新的`Deflate`對象。 #### zlib.createInflate([options]) 根據一個`options`,返回一個新的`Inflate`對象。 #### zlib.createDeflateRaw([options]) 根據一個`options`,返回一個新的`DeflateRaw`對象。 #### zlib.createInflateRaw([options]) 根據一個`options`,返回一個新的`InflateRaw`對象。 #### zlib.createUnzip([options]) 根據一個`options`,返回一個新的`Unzip`對象。 #### Class: zlib.Zlib 這個類未被`zlib`模塊暴露。它之所以會出現在這里,是因為它是`compressor/decompressor`類的基類。 #### zlib.flush([kind], callback) `kind`默認為`zlib.Z_FULL_FLUSH`。 沖刷等待中的數據。不要輕率地調用這個方法,過早的沖刷會給壓縮算法帶來消極影響。 #### zlib.params(level, strategy, callback) 動態地更新壓縮等級和壓縮策略。只適用于`deflate`算法。 #### zlib.reset() 將`compressor/decompressor`重置為默認值。只使用于`inflate`和`deflate`算法。 #### Class: zlib.Gzip 使用`gzip`壓縮數據。 #### Class: zlib.Gunzip 解壓一個`gzip`流。 #### Class: zlib.Deflate 使用`deflate`壓縮數據。 #### Class: zlib.Inflate 解壓一個`deflate`流。 #### Class: zlib.DeflateRaw 使用`deflate`壓縮數據,不添加`zlib`頭。 #### Class: zlib.InflateRaw 解壓一個原始`deflate`流。 #### Class: zlib.Unzip 通過自動探測頭信息,解壓`Gzip`或`Deflate`壓縮流。 #### 便捷方法 所有的方法接受一個字符串或一個`buffer`作為第一個參數,并且第二個參數是一個可選的 `zlib`類的配置,并且會以`callback(error, result)`的形式執行提供的回調函數。 每一個方法都有一個同步版本,除去回調函數,它們接受相同的參數。 #### zlib.deflate(buf[, options], callback) #### zlib.deflateSync(buf[, options]) 使用`Deflate`壓縮一個字符串。 #### zlib.deflateRaw(buf[, options], callback) #### zlib.deflateRawSync(buf[, options]) 使用`DeflateRaw`壓縮一個字符串。 #### zlib.gzip(buf[, options], callback) #### zlib.gzipSync(buf[, options]) 使用`Gzip`壓縮一個字符串。 #### zlib.gunzip(buf[, options], callback) #### zlib.gunzipSync(buf[, options]) 使用`Gunzip`壓縮一個字符串。 #### zlib.inflate(buf[, options], callback) #### zlib.inflateSync(buf[, options]) 使用`Inflate`壓縮一個字符串。 #### zlib.inflateRaw(buf[, options], callback) #### zlib.inflateRawSync(buf[, options]) 使用`InflateRaw`壓縮一個字符串。 #### zlib.unzip(buf[, options], callback) #### zlib.unzipSync(buf[, options]) 使用`Unzip`壓縮一個字符串。 #### Options 每一個類都接受一個`options`對象。所有的`options`對象都是可選的。 注意一些選項只與壓縮相關,會被解壓縮類忽略: - flush (默認:`zlib.Z_NO_FLUSH`) - chunkSize (默認:`16*1024`) - windowBits - level (僅用于壓縮) - memLevel (僅用于壓縮) - strategy (僅用于壓縮) - dictionary (僅用于`deflate/inflate`,默認為空目錄) 參閱`http://zlib.net/manual.html#Advanced`中`deflateInit2`和`inflateInit2`的描述來獲取更多信息。 #### 內存使用調優 來自`zlib/zconf.h`,將其修改為`io.js`的用法: 默認的內存要求(字節)為: ~~~ (1 << (windowBits+2)) + (1 << (memLevel+9)) ~~~ 換言之:`windowBits=15`的128K 加上 `menLevel = 8`(默認值)的128K 加上其他小對象的一些字節。 例子,如果你想要將默認內存需求從256K減少至128K,將選項設置為: ~~~ { windowBits: 14, memLevel: 7 } ~~~ 當然,它會降低壓縮等級(沒有免費的午餐)。 `inflate`的內存需求(字節)為: ~~~ 1 << windowBits ~~~ 換言之:`windowBits=15`(默認值)的32K加上其他小對象的一些字節。 這是內部輸出緩沖外的`chunkSize`大小,默認為16K。 `zlib`壓縮的速度動態得受設置的壓縮等級的影響。高的等級會帶來更好地壓縮效果,但是花費的時間更長。低的等級會帶來更少的壓縮效果,但是更快。 通常,更高的內存使用選項意味著`io.js`會調用`zlib`更少次數,因為在一次單獨的寫操作中它可以處理更多的數據。所以,這是影響速度和內存占用的另一個因素。 #### 常量 所有在`zlib.h`中定義的常量,都也被定義在了`require('zlib')`中。大多數操作中,你都將不會用到它們。它們出現在這里只是為了讓你對它們的存在不套感到驚訝。該章節幾乎完全來自`zlib`文件。更多詳情請參閱`http://zlib.net/manual.html#Constants`。 允許的沖刷值: ~~~ zlib.Z_NO_FLUSH zlib.Z_PARTIAL_FLUSH zlib.Z_SYNC_FLUSH zlib.Z_FULL_FLUSH zlib.Z_FINISH zlib.Z_BLOCK zlib.Z_TREES ~~~ `compression/decompression`函數的返回碼。負值代表錯誤,正值代表特殊但是正常的事件: ~~~ zlib.Z_OK zlib.Z_STREAM_END zlib.Z_NEED_DICT zlib.Z_ERRNO zlib.Z_STREAM_ERROR zlib.Z_DATA_ERROR zlib.Z_MEM_ERROR zlib.Z_BUF_ERROR zlib.Z_VERSION_ERROR ~~~ 壓縮等級: ~~~ zlib.Z_NO_COMPRESSION zlib.Z_BEST_SPEED zlib.Z_BEST_COMPRESSION zlib.Z_DEFAULT_COMPRESSION ~~~ 壓縮策略: ~~~ zlib.Z_FILTERED zlib.Z_HUFFMAN_ONLY zlib.Z_RLE zlib.Z_FIXED zlib.Z_DEFAULT_STRATEGY ~~~ `data_type`域的可能值: ~~~ zlib.Z_BINARY zlib.Z_TEXT zlib.Z_ASCII zlib.Z_UNKNOWN ~~~ `deflate`壓縮方法(當前版本只支持這一個): ~~~ zlib.Z_DEFLATED ~~~ 用于初始化`zalloc`,`zfree`,`opaque`: ~~~ zlib.Z_NULL ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看