2017-05-03 45 views
0

为什么是这样的:节点fs.readFileSync返回一个uInt8数组而不是原始缓冲区数组?

var myArrayBuffer = fs.readFileSync(file, null) 

返回,而不是只是一个arrayBuffer的UINT8数组?为什么这似乎工作?

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

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

回答

1

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

Buffer实例也是Uint8Array实例。但是,与ECMAScript 2015中的TypedArray规范存在细微的不兼容性。例如,尽管ArrayBuffer#slice()创建了该分片的副本,但Buffer#slice()的实施创建了对现有Buffer的视图而不复制,使得Buffer#slice()更有效。 [...]

有可能 创建一个新的Buffer通过使用TypeArray对象的.buffer地产股同样分配的内存为 TypedArray实例。

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

+0

但为什么有人会需要uInt8Array?你直接读取文件到缓冲区并处理字节?如果你阅读一个二进制文件,它就像是uInt8似乎渺茫,只是增加开销,在我的情况下困惑和沮丧。 – LrakWortep

+0

不确定你在这里是什么意思。是的,“缓冲区”也是“Uint8Array” - 但你不必像以前那样使用它。 – raina77ow

+0

我也很困惑;)缓冲区似乎也不是一个uint8Array,因为uint8Array.slice(266,长度)给了我Uint8array索引,所以它的两倍,其中缓冲区片切片单个字节。只是好像增加了开销 – LrakWortep

相关问题