example array javascript node.js websocket socket.io arraybuffer

example - arraybuffer to byte array javascript



¿Cuál es la diferencia entre una matriz y un ArrayBuffer? (1)

Un ArrayBuffer es más que una simple matriz. Contiene datos binarios en bruto. Esto es muy útil para la manipulación directa de la memoria y la conservación del espacio.

Cuando crea una matriz normal, no obtendrá un conjunto adecuado de memoria contigua en muchos casos, ya que las matrices pueden contener cualquier combinación de diferentes tipos de objetos. Esto es útil cuando tiene datos dinámicos y múltiples tipos juntos (ocurre frecuentemente en JS) pero no es tan útil cuando conoce el diseño exacto de la memoria que necesita.

Esto también le permite ver los datos en el nivel de bytes. Por ejemplo, es bastante común en los formatos de datos binarios tener un número identificador de n byte long, un campo m byte long que le indica cuántos bytes se usan para este campo y m bytes de datos que realmente conforman el campo de datos.

[ identifier ][ bytes of data ][ data ]

Con un ArrayBuffer, tiene la opción de moverse a través de esos datos en el nivel de bytes mediante el uso de varias Vistas. Una matriz regular no le permite moverse a través de los datos con ese nivel de granularidad porque no se garantizan el diseño de la memoria.

Finalmente, debido a que le está diciendo al compilador / intérprete exactamente cuánto espacio va a usar y exactamente cómo lo va a ver, puede hacer optimizaciones mucho más avanzadas al trabajar con esa información. Al iterar a través de esos datos, no tiene que realizar saltos calculados a través de la memoria. En cambio, sabe exactamente cuánto avanzar en la memoria para encontrar el siguiente punto de datos.

En cuanto a lo que es Uint8Array , es una matriz Uint8Array . Básicamente, le dice al compilador / intérprete que accederá a estos datos exclusivamente como uint 8 bits lo que, una vez más, le permite optimizar mejor. Luego puede usar la indexación de matriz estándar en él ( arr[0], arr[1], etc. ) y recuperará los valores de uint equivalentes de la matriz.

TL; DR Toman menos espacio cuando se conoce el formato de datos exacto, le permite moverse más exactamente a través de sus datos y le da al compilador / intérprete mayores opciones para la optimización.

Me pregunto por qué todos usan ArrayBuffer lugar de solo una array normal, una string o un JSON string para enviar mensajes desde el servidor al cliente. ¿Es más eficiente?

Además, me pregunto qué es Uint8Array , cómo es diferente, dónde usar los dos, etc.

Actualmente estoy usando Node.js con Socket.io, pero me complace cambiar a WebSocket s puro si es un mejor enfoque.