我正在使用一个库进行HTTP调用,我知道它正在使用XMLHTTPRequest,但是我无法设置responseType且response始终是文本。
我需要将文本转换为ArrayBuffer,因为我使用了responseType:ArrayBuffer。我尝试了多次转换,但是没有一个产生相同的缓冲区。
更新:所以下面的代码将ArrayBuffer转换为字符串。
var dataView = new DataView(this.response);
var decoder = new TextDecoder('utf8');
var decodedString = decoder.decode(dataView);
我需要扭转这个状况
var encodedr = new TextEncoder('utf8');
var encodedArray =encodedr.encode(req.body);
var arrayBuffer = encodedArray.buffer;
不一样,几乎是大小的两倍。
更新2: 毛刺与代码示例https://successful-pepper.glitch.me/
答案 0 :(得分:1)
我在您发布的故障中看到的唯一问题是,您试图按引用而不是按值比较2个ArrayBuffer。
在JavaScript中,非原始值在内存中具有引用。因此,当比较非原始值时,将比较它们在内存中的引用而不是它们的值。
一个简单的例子:
var firstArray = [1, 2, 3];
var secondArray = [1, 2, 3];
console.log(firstArray === secondArray); // prints: false
您可以尝试使用JSON.stringify()
将两个ArrayBuffers都转换为JSON并比较这些值。然后,您将获得两个ArrayBuffers相同。
另一种测试两个ArrayBuffer是否相同的方法可以在这里找到:How to test for equality in ArrayBuffer, DataView, and TypedArray