2017-05-03 47 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

相關問題