我正在使用以下代码为图像生成 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 的理解是,从服务器发送的字节表示由 Blob 构造函数重构,并且数组缓冲区应该正确地从服务器发送字节数组。那为什么Uint8Array
工作正常,但不行Int16Array, Uint16Array, Int32Array and Uint32Array
呢?