2012-01-02 76 views
3

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

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

这可以工作,但对于中等大小的文件来说非常慢。 有没有更好的方法来做到这一点? 谢谢。

回答

0

你可以将其转换为一个“传统”的数组是这样的:

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

这将允许你写出这些数据:

bstm.writeByteArray(dataArray, dataArray.length); 

假设这家公司nversion will become unnecessary in Firefox 11,您将可以直接通过Uint8Array