Как вы получаете доступ к информации уровня байтов в JavaScript? - PullRequest
6 голосов
/ 03 июня 2010

Общепринятым ответом является то, что вы не можете. Однако есть все больше свидетельств того, что это не так, поскольку существуют проекты, которые читают в типах данных, которые не являются базовыми типами HTML. Некоторые проекты, которые делают это, являются версией JavaScript ProtoBuf и Smokescreen .

Smokescreen - это интерпретатор флэш-памяти, написанный на JS, поэтому, если невозможно получить доступ к байтам напрямую, как эти проекты работают вокруг этого? Источник Smokescreen можно найти здесь . Я просмотрел его, но сейчас JS не является моим основным языком, и решение ускользает от меня.

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Они оба, похоже, используют String (в данном случае responseText из XMLHttpRequest) напрямую как набор байтов.

data = ... // a binary string
bytes = [];
for ( i = 0; i < data.length; i++ )
{
  // This coverts the unicode character to a byte stripping
  // off anything past the first 8 bits
  bytes[i] = data.charCodeAt( i ) & 0xFF;
}
0 голосов
/ 03 июня 2010

Protobuf выполняет всю свою работу с полем XMLHttpRequest.requestText, которое является просто строкой DOMString.

...