Javascript类型转换

Javascript type conversion

本文关键字:类型转换 Javascript      更新时间:2023-09-26

我正在写一个Firefox扩展。使用javascript,我想从web POST下载一个二进制文件,然后我想把它的内容写入一个文件。我的困难是如何从网络返回的类型转换为写入所需的类型:

var c=new XMLHttpRequest();
c.responseType = "arraybuffer";
var data=Uint8Array(c.response);

"data"包含二进制内容。将其写入文件:

var file= FileUtils.getFile("ProfD", ["somefile"]);
var ostm= FileUtils.openFileOutputStream(file);
var bstm= Cc['@mozilla.org/binaryoutputstream;1'].createInstance(Ci.nsIBinaryOutputStream);
bstm.setOutputStream(ostm);

然后我需要在"bstm"中写入"data",但我发现这样做的唯一方法非常慢:

for(var i=0; i<data.length; i++)
  bstm.write8(data[i]);

这个可以工作,但是对于中等大小的文件来说速度很慢。有更好的方法吗?谢谢。

不太确定你想要达到什么目的,但也许这可以帮助你。

Firefox海报扩展:http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6

它似乎正在做你需要的

您可以将其转换为"常规"数组,如下所示:

var dataArray = Array.prototype.slice.call(data);

这将允许你写出数据:

bstm.writeByteArray(dataArray, dataArray.length);

这个转换在Firefox 11中将不再需要,你可以直接传入Uint8Array