Преобразование типов Javascript - PullRequest
3 голосов
/ 02 января 2012

Я пишу расширение для 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]);

Это работает, но очень медленно для файлов среднего размера. Есть ли лучший способ сделать это? Благодаря.

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Вы можете преобразовать его в «обычный» массив следующим образом:

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

Это позволит вам записать эти данные:

bstm.writeByteArray(dataArray, dataArray.length);

Предположительно, это преобразование станет ненужным в Firefox 11 , вы сможете напрямую перейти на Uint8Array.

0 голосов
/ 02 января 2012

Не совсем уверен, чего вы здесь добиваетесь, но, возможно, это поможет вам.

Расширение плаката для Firefox: http://www.google.nl/codesearch#1Ekgj8MZCE0/README&q=Firefox%20extension&l=9&ct=rc&cd=6

Кажется, он делает то, что вам нужно

...