节点fs.readFileSync返回一个uInt8数组而不是原始缓冲区数组?

时间:2017-05-03 20:05:36

标签: arrays node.js binary strong-typing

为什么会这样:

var myArrayBuffer = fs.readFileSync(file, null)

返回一个uInt8数组而不仅仅是一个arrayBuffer?为什么这似乎有效?

var myArrayBuffer = fs.readFileSync(file, null).buffer;
var myAArray = new Uint16Array( myArrayBuffer.slice(266,(sizeofArray*sizeOfArrayElement));

为什么fs.readFile会将我的文件解析为uInt8数组?没意思,该文件有一堆不同的数据类型,长度不是1个字节。

1 个答案:

答案 0 :(得分:3)

因为v3.0.0 Buffer类继承自Uint8Array类。引用the doc

  

Buffer个实例也是Uint8Array个实例。但是,与ECMAScript 2015中的TypedArray规范存在微妙的不兼容性。例如,当ArrayBuffer#slice()创建切片的副本时,Buffer#slice()的实现会创建现有Buffer的视图。 1}}无需复制,使Buffer#slice()更有效率。 [...]

     

有可能   创建一个新的Buffer,它与a共享相同的分配内存   使用TypedArray对象TypeArray属性的.buffer实例。

......这正是你的例子所做的。