在客户端读取非常大的JavaScript gzip文件而不使用node.js

在客户端读取非常大的JavaScript gzip文件而不使用node.js,javascript,inflate,Javascript,Inflate,我想制作一个javascript例程,它的工作方式类似于Java中的GzipInputStream,在客户端读取非常大的gzip文件,而不使用node.js 这是我的代码(尚未运行),灵感来自: 函数ab2string(buf){ var str=“”; var ab=新的UINT16阵列(buf); var-abLen=平均长度; var CHUNK_SIZE=Math.pow(2,16); var偏移量、len、subab; 对于(偏移量=0;偏移量

我想制作一个javascript例程,它的工作方式类似于Java中的GzipInputStream,在客户端读取非常大的gzip文件,而不使用node.js

这是我的代码(尚未运行),灵感来自:

函数ab2string(buf){
var str=“”;
var ab=新的UINT16阵列(buf);
var-abLen=平均长度;
var CHUNK_SIZE=Math.pow(2,16);
var偏移量、len、subab;
对于(偏移量=0;偏移量对于节点中的(var i=0,strLen=str.length;i,我们可以从一个文件(
fs.createReadableStream()
)创建一个可读流,并通过管道将其传输到
zlib.createGunzip()
。可读流逐块读取数据,然后将其传递到
gunzip接收器
。因此,如果我们将
gzip
-ed文件放入此设置中,我们将逐块获取提取的数据

在的帮助下,我们可以在浏览器中执行此操作

e、 g.使用这个
main.js
文件

// browserify automatically replaces the node's native zlib with this:
// https://www.npmjs.com/package/browserify-zlib
var zlib = require('zlib');

var drop = require('drag-and-drop-files');
var createReadStream = require('filereader-stream');

var gunzip = zlib.createGunzip();

drop(document.getElementById('drop'), function(files) {
  var first = files[0];
  createReadStream(first).pipe(gunzip);

  gunzip.on('data', function(data){
    // read the data chunk-by-chunk
    console.log(data.toString());
  });

  gunzip.on('end', function(){
    console.log('done');
  });
});
为了让它在浏览器中工作,我们应该在它上面加上browserify的魅力

$ browserify app.js > bundle.js
然后,我们可以加载一个
index.html
,其中包含
bundle.js
(不要忘了
drop
-zone)

我很快就把poc(流媒体部分,也许我们需要使用webworker API来处理一个非常大的文件)放在了一起


在JS这样的单线程环境中试图读取几百GB大小的文件对我来说简直是疯了。我想,如果你在浏览器中运行这个,它可能会在大多数机器上锁定数小时。有些浏览器,如Firefox,会弹出“无响应脚本”不太长时间后发出警告。这就是我使用WebWorker的原因。在我的例子中,当满足条件时(通过终止WebWorker),gzip读取停止。它可以读取未压缩的文件,比如。现在的问题是如何一部分一部分地解码/膨胀gzip?我想你可能会发现流的用途。这就是它们的用途。流已经通过browserify项目移植到浏览器:是否有任何“non Node.js”javascript解决方案?有没有一种简单的方法不需要所有花哨的东西?我需要javascript中的
import blah;new GZIPInputStream(blah blah);
之类的东西。
$ browserify app.js > bundle.js