JavaScript 将 Blob 转换为 Float32Array(或其他类型化数组)

Pet*_*ing 2 javascript websocket

如何将通过 WebSocket 二进制消息接收到的 blob 转换为 Float32Array(或其他类型化数组:Uint32、Uint16 等)。

我尝试使用 FileReader,但“结果”需要很长时间才能可用。结果必须在下一个接收到的 WebSocket 消息中可用。

如果我可以让 WebSocket 接收 ArrayBuffer 而不是 Blob,那就行了。我怎样才能做到这一点?

Pet*_*ing 6

找到了解决方案,很简单。WebSocket binaryType 默认为 'Blob',将其更改为 ArrayBuffer,然后将数据转换为其他 TypedArrays 会很快。

var ws = new WebSocket(...);
ws.binaryType = 'arraybuffer';
ws.onmessage = wsevent;
Run Code Online (Sandbox Code Playgroud)

消息处理程序可能如下所示:

var floatArray;
function wsevent(event) {
  if (event.data instanceof ArrayBuffer) {
    floatArray = new Float32Array(event.data);
    return;
  }
  //...handle other ws messages
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我通常在一条消息中发送二进制数据,然后下一条文本消息将使用二进制数据。