如何读写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
相关产品推荐
相关产品推荐

