You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读写BigUint64Array到文件?解决Buffer转BigUint64Array报错

解决BigUint64Array写入文件后读取转换的TypeError问题

问题出在读取文件得到Buffer后,直接用BigUint64Array.from(x)的方式完全错误。BigUint64Array.from()会遍历Buffer中的每个字节(每个元素是0-255的Number),并尝试将每个字节单独转换为BigInt,这和你写入的完整64位BigInt数据结构不匹配,因此抛出类型错误。

正确的做法是利用Buffer底层的ArrayBuffer创建BigUint64Array视图,这样才能正确还原写入的64位无符号大整数数组:

const { writeFileSync, readFileSync } = require('node:fs')

const st = new Set([1n, 2n, 3n, 1n, 1n, 1n])
const A = BigUint64Array.from(st)
console.log(A)

writeFileSync('./abc', A)
let x = readFileSync('./abc')
// 基于Buffer的ArrayBuffer创建BigUint64Array视图
x = new BigUint64Array(x.buffer, x.byteOffset, x.byteLength / BigUint64Array.BYTES_PER_ELEMENT)
console.log(x)

关键说明:

  • Node.js的Buffer本质是Uint8Array的子类,它的buffer属性指向底层的ArrayBuffer,byteOffset是Buffer在ArrayBuffer中的起始位置,byteLength是Buffer的字节长度。
  • BigUint64Array.BYTES_PER_ELEMENT固定为8(每个BigUint64元素占8字节),用总字节长度除以8得到数组的元素个数,确保视图长度和原始数据一致。
  • 这种方式会直接解析Buffer中的二进制数据为原来的BigUint64Array,完整保留数据结构与数值。

内容的提问来源于stack exchange,提问作者RikaShiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:15:42