Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 节点fs.readFileSync是否返回uInt8数组而不是原始缓冲区数组?_Arrays_Node.js_Binary_Strong Typing - Fatal编程技术网

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

Arrays 节点fs.readFileSync是否返回uInt8数组而不是原始缓冲区数组?,arrays,node.js,binary,strong-typing,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.re

为什么会这样:

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字节

因为从v3.0.0
Buffer
类继承自
Uint8Array
类。引述:

Buffer
实例也是
Uint8Array
实例。但是,与ECMAScript 2015中的
TypedArray
规范存在细微的不兼容。例如,
ArrayBuffer#slice()
创建切片的副本时,
Buffer#slice()
的实现在现有的
Buffer
上创建一个视图,而无需复制,从而使
Buffer#slice()
更加高效。[……]

有可能 创建一个新的
缓冲区
,该缓冲区与服务器共享相同的分配内存
TypedArray
实例,方法是使用
TypeArray
对象的
.buffer
属性


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

因为v3.0.0
Buffer
类继承自
Uint8Array
类。引述:

Buffer
实例也是
Uint8Array
实例。但是,与ECMAScript 2015中的
TypedArray
规范存在细微的不兼容。例如,
ArrayBuffer#slice()
创建切片的副本时,
Buffer#slice()
的实现在现有的
Buffer
上创建一个视图,而无需复制,从而使
Buffer#slice()
更加高效。[……]

有可能 创建一个新的
缓冲区
,该缓冲区与服务器共享相同的分配内存
TypedArray
实例,方法是使用
TypeArray
对象的
.buffer
属性


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

但是为什么有人需要uInt8Array呢?将文件直接读入缓冲区并处理字节?如果你在一个二进制文件中读取,那么它成为uInt8的可能性似乎很小,只是增加了开销,在我的例子中,是困惑和沮丧。不确定你在这里指的是什么。是的,
Buffer
也是
Uint8Array
-但你不必把它当作前者使用。我也很困惑;)缓冲区似乎不是uint8Array,因为uint8Array.slice(266,length)为我提供了uint8Array索引,所以它的索引是uint8Array索引的两倍,而缓冲区切片为单个字节。看起来就像是添加了染料,文档中也提到了这一点。在这种情况下,继承意味着重写某些方法的行为。但是为什么有人需要uInt8Array呢?将文件直接读入缓冲区并处理字节?如果你在一个二进制文件中读取,那么它成为uInt8的可能性似乎很小,只是增加了开销,在我的例子中,是困惑和沮丧。不确定你在这里指的是什么。是的,
Buffer
也是
Uint8Array
-但你不必把它当作前者使用。我也很困惑;)缓冲区似乎不是uint8Array,因为uint8Array.slice(266,length)为我提供了uint8Array索引,所以它的索引是uint8Array索引的两倍,而缓冲区切片为单个字节。看起来就像是添加了染料,文档中也提到了这一点。在这种情况下,继承还意味着重写某些方法的行为。