Node.js readUIntBE 任意大小限制?
Node.js readUIntBE arbitrary size restriction?
背景
我正在使用 Node.js 本机缓冲区 API 读取缓冲区。这个 API 有两个函数,叫做 readUIntBE
和 readUIntLE
,分别用于 Big Endian 和 Little Endian。
https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert
问题
通过阅读文档,我偶然发现了以下几行:
- byteLength 要读取的字节数。必须满足:0 < byteLength <= 6.
如果我没理解错的话,这意味着我使用这个函数一次只能读取 6 个字节,这对我的用例来说毫无用处,因为我需要读取一个由 8 个字节组成的时间戳。
问题
- 这是文档错字吗?
- 如果不是,那么这样任意限制的原因是什么?
- 如何连续读取 8 个字节(或者如何读取大于 6 个字节的序列?)
回答
在官方 Node.js 回购中询问后,我从其中一位成员那里得到了以下回复:
- 不,这不是错字
- byteLength 对应于例如8 位、16 位、24 位、32 位、40 位和 48 位。更多是不可能的,因为 JS 数字最多只能安全到 Number.MAX_SAFE_INTEGER.
- 如果要读取8个字节,可以通过添加偏移量读取多个条目。
来源:https://github.com/nodejs/node/issues/20249#issuecomment-383899009
背景
我正在使用 Node.js 本机缓冲区 API 读取缓冲区。这个 API 有两个函数,叫做 readUIntBE
和 readUIntLE
,分别用于 Big Endian 和 Little Endian。
https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert
问题
通过阅读文档,我偶然发现了以下几行:
- byteLength 要读取的字节数。必须满足:0 < byteLength <= 6.
如果我没理解错的话,这意味着我使用这个函数一次只能读取 6 个字节,这对我的用例来说毫无用处,因为我需要读取一个由 8 个字节组成的时间戳。
问题
- 这是文档错字吗?
- 如果不是,那么这样任意限制的原因是什么?
- 如何连续读取 8 个字节(或者如何读取大于 6 个字节的序列?)
回答
在官方 Node.js 回购中询问后,我从其中一位成员那里得到了以下回复:
- 不,这不是错字
- byteLength 对应于例如8 位、16 位、24 位、32 位、40 位和 48 位。更多是不可能的,因为 JS 数字最多只能安全到 Number.MAX_SAFE_INTEGER.
- 如果要读取8个字节,可以通过添加偏移量读取多个条目。
来源:https://github.com/nodejs/node/issues/20249#issuecomment-383899009