0

我正在使用以下代码为图像生成 blob URL:

1) let arrayBufferView =  new Int8Array(this.response); 
    let blob = new Blob([arrayBufferView], {type : 'image/png'});
    let img = document.querySelector('img');
    img.src = URL.createObjectURL(blob);
    img.onload = function() {URL.revokeObjectURL(this.src);}

JSON 响应来自发送图像二进制数据的字节表示的 Java 代码。Java 中的字节是 8 位有符号整数。所以第 1 行工作正常但是当我用let arrayBufferView = new Uint8Array(this.response);它替换第 1 行时仍然可以正常工作。从 Java 签名的 8 位将如何转换为 Uint8Array(这是一个 8 位无符号数组视图)。

然后我尝试了以下 ArrayBuffer 其他变体的代码:

let arrayBufferView =  new Int16Array(this.response);
let arrayBufferView =  new Uint16Array(this.response);
let arrayBufferView =  new Int32Array(this.response);
let arrayBufferView =  new Uint32Array(this.response);

对于上述四个 ArrayBuffer,不会生成 blob URL,以及为什么它适用于let arrayBufferView = new Uint8Array(this.response).

我对 blob URL 的理解是,从服务器发送的字节表示由 Bl​​ob 构造函数重构,并且数组缓冲区应该正确地从服务器发送字节数组。那为什么Uint8Array工作正常,但不行Int16Array, Uint16Array, Int32Array and Uint32Array呢?

4

0 回答 0