Javascript类型转换

时间:2012-01-02 12:17:57

标签: javascript firefox xpcom

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

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”中写“数据”,但我发现这样做的唯一方法是非常慢:

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

这样可行,但对于中等大小的文件来说速度非常慢。 有没有更好的方法呢? 感谢。

2 个答案:

答案 0 :(得分:0)

不确定你想在这里实现什么,但也许这可以帮助你。

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

似乎正在做你需要的事情

答案 1 :(得分:0)

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

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

这将允许您写出该数据:

bstm.writeByteArray(dataArray, dataArray.length);

据称,此次转化will become unnecessary in Firefox 11,您可以直接传递Uint8Array