【问题标题】:When to use Uint8Array, Uint16Array, Uint32Array何时使用 Uint8Array、Uint16Array、Uint32Array
【发布时间】:2019-01-17 13:28:12
【问题描述】:

我有一个通过 XMLHttpRequest 加载用户文本并以二进制格式返回的应用程序。我知道 8、16 和 32 之间的主要区别是每个元素的字节数,但我不知道何时使用它们。

例如,对于我的应用程序,由于文本文件实际上可以包含任何可能的字符,那么哪一个最好?

我尝试了不同的文件,包括一个包含表情符号的文件,似乎在 Uint8Array 中,表情符号占用了 4 个索引。

有什么理由让我不应该只使用 Uint8Array 或者有什么理由我应该在读取文件时动态选择?我已经阅读了每个MDN 文档,但除了字节大小之外,它似乎没有提供太多的见解。

这是我目前用来加载文件的代码:

asset= new XMLHttpRequest();

asset.addEventListener('readystatechange', function load() {

    if (asset.readyState == 4 && asset.data.status == 200) {

        const arrayBuffer = asset.data.response;

        if (arrayBuffer) asset.data = new Uint8Array(arrayBuffer);

    }

}.bind(this), false);

// Error handling.

asset.responseType = 'arraybuffer';

asset.open('GET', asset.src);

asset.send();

【问题讨论】:

  • 源“二进制格式”到底是什么?您将其描述为“文本”……我的意思是,UTF-8 可以描述为“二进制格式”,因为计算中的最终一切都涉及二进制数据。
  • @Pointy 我可以将其描述为“文本”的最佳方式是因为我真的不知道文本文件中可能包含什么,我唯一要做的就是返回“二进制格式” " 作为Uint8ArrayUint16ArrayUint32Array

标签: javascript arrays xmlhttprequest byte bytebuffer


【解决方案1】:

这完全取决于您发送到其中的数据类型。 8 位对于 ASCII 字符等很好。 16 位用于 UCS-2。 32 位用于 UTF-32,您不一定会使用它,因为它更适用于边缘情况。 Windows 几乎不使用它,Unix 有时只在内部应用程序中使用它。

【讨论】:

  • 我有点理解,但例如表情符号不是 ASCII 字符集的一部分,但它们仍然可以很好地与Uint8Array 一起使用,它们只占用数组中的 4 个插槽。我发送给它的数据可以是用户可以放置在文本文件中的任何内容,没有限制。
猜你喜欢
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多