Node.js readUIntBE 任意大小限制?

Node.js readUIntBE arbitrary size restriction?

背景

我正在使用 Node.js 本机缓冲区 API 读取缓冲区。这个 API 有两个函数,叫做 readUIntBEreadUIntLE,分别用于 Big Endian 和 Little Endian。

https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert

问题

通过阅读文档,我偶然发现了以下几行:

如果我没理解错的话,这意味着我使用这个函数一次只能读取 6 个字节,这对我的用例来说毫无用处,因为我需要读取一个由 8 个字节组成的时间戳。

问题

  1. 这是文档错字吗?
  2. 如果不是,那么这样任意限制的原因是什么?
  3. 如何连续读取 8 个字节(或者如何读取大于 6 个字节的序列?)

回答

在官方 Node.js 回购中询问后,我从其中一位成员那里得到了以下回复:

  1. 不,这不是错字
  2. byteLength 对应于例如8 位、16 位、24 位、32 位、40 位和 48 位。更多是不可能的,因为 JS 数字最多只能安全到 Number.MAX_SAFE_INTEGER.
  3. 如果要读取8个字节,可以通过添加偏移量读取多个条目。

来源:https://github.com/nodejs/node/issues/20249#issuecomment-383899009