【问题标题】:Javascript type conversionJavascript类型转换
【发布时间】:2012-01-02 12:17:56
【问题描述】:

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

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

“数据”包含二进制内容。 将其写入文件:

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]);

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

【问题讨论】:

    标签: javascript firefox xpcom


    【解决方案1】:

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

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

    它似乎在做你需要的事情

    【讨论】:

      【解决方案2】:

      您可以像这样将其转换为“常规”数组:

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

      这将允许您写出该数据:

      bstm.writeByteArray(dataArray, dataArray.length);
      

      据说,这个转换will become unnecessary in Firefox 11,就可以直接传入Uint8Array了。

      【讨论】:

        猜你喜欢
        • 2011-06-05
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多