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

Lra*_*tep 1 arrays binary strong-typing node.js

为什么是这样:

var myArrayBuffer = fs.readFileSync(file, null)
Run Code Online (Sandbox Code Playgroud)

返回一个 uInt8 数组而不是一个数组缓冲区?为什么这似乎有效?

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

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

rai*_*7ow 5

因为自 v3.0.0Buffer类继承自Uint8Array类。引用文档

Buffer实例也是Uint8Array实例。但是,与TypedArrayECMAScript 2015 中的规范存在细微的不兼容。例如,在ArrayBuffer#slice()创建切片的副本时,实现Buffer#slice()Buffer不复制的情况下在现有视图上创建视图,从而Buffer#slice()提高了效率。[...]

可以使用对象的属性创建一个BufferTypedArray实例共享相同分配内存 的新TypeArray对象.buffer

...这正是您的示例中所做的。

  • 是的,文档中也提到了这一点。在这种情况下,继承还意味着重写某些方法的行为。 (2认同)