Tengo un problema con decode() en SharedArrayBuffer.
Código:
var sharedArrayBuffer = new SharedArrayBuffer(2); var uint8Array = new Uint8Array(sharedArrayBuffer); uint8Array[0] = 20; var decoder = new TextDecoder(); decoder.decode(uint8Array);Error:
Failed to execute 'decode' on 'TextDecoder': The provided ArrayBufferView value must not be shared.Aquí hay una especificación que advierte a los desarrolladores sobre la condición de carrera en este tipo de memoria. ¿Puedo de alguna manera forzar la decodificación? Estoy seguro de que los datos no cambiarán durante la decodificación. ¿O hay una solución para esto?
Motivos: quiero crear una sola copia de Uint8Array y pasarla sin copiar a través de un mensaje posterior (que se copia de forma predeterminada si no se especifica transferible) a varios (> 3) IFrames (con etiqueta de espacio aislado). Tal vez hay otras soluciones posibles?
Parece que usar ArrayBuffer funciona bien.
var arrayBuffer = new ArrayBuffer(2); var uint8Array = new Uint8Array(arrayBuffer); uint8Array[0] = 20; var decoder = new TextDecoder(); decoder.decode(uint8Array);js
var sharedArrayBuffer = new SharedArrayBuffer(32); var ary = new Int32Array(sharedArrayBuffer); ary[0] = 20; var encoder = new TextEncoder(); var EncodedArray = encoder.encode(ary); console.log("Encoded Array : ", EncodedArray) var decoder = new TextDecoder(); var DecodedArray = decoder.decode(EncodedArray); console.log("Decoded Array is : ", DecodedArray)