2012-01-02 102 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