Javascript data.buffer.length返回未定义

Javascript data.buffer.length返回未定义,javascript,node.js,buffer,Javascript,Node.js,Buffer,我通过外部节点库输入可读流。我正在尝试读取并获取ArrayBuffer,并将其转换为我的程序的其他内容 input.on(‘data’, function(data){ console.log(data); //returns <Buffer 73 fe 74 fe 95 fe 95 fe b6 fe b6 fe 00 ff 01 ff 37 ff 36 ff 8f ff 8f ff 10 00 10 00 65 00 66 00 95 00 95 00 79 00 7a 00 1b 00

我通过外部节点库输入可读流。我正在尝试读取并获取ArrayBuffer,并将其转换为我的程序的其他内容

input.on(‘data’, function(data){
console.log(data); //returns <Buffer 73 fe 74 fe 95 fe 95 fe b6 fe b6 fe 00 ff 01 ff 37 ff 36 ff 8f ff 8f ff 10 00 10 00 65 00 66 00 95 00 95 00 79 00 7a 00 1b 00 1a 00 be ff be ff 56 ff ... >

console.log(data.buffer); // returns — ArrayBuffer { byteLength: 300 }

console.log(data.buffer.length); //returns undefined
console.log(data.buffer[0]); //returns undefined
});
input.on('data',函数(data){
console.log(数据);//返回
console.log(data.buffer);//返回-ArrayBuffer{bytellength:300}
console.log(data.buffer.length);//返回未定义的
console.log(data.buffer[0]);//返回未定义的
});

如果data.buffer是一个
ArrayBuffer
,为什么我根本无法访问它?

看起来您的数据变量本身就是一个
buffer
,通过获取
data.buffer
您就得到了底层的
ArrayBuffer

因此,您应该做如下操作:

console.log(data.length);
console.log(data[0]);
或者获取data.buffer,但请注意ArrayBuffers与“普通”JS数组没有太多共同之处


这似乎有道理,但我正在尝试访问底层数组缓冲区的值,以将其转换为音频缓冲区。如果无法访问
数据.buffer[0]
等,如何访问这些ArrayBuffer值?这可能很棘手,具体取决于您将如何处理数据。一般情况下,您希望使用DataView对象,它为ArrayBuffer交互提供接口。查看此页面和我答案中的第二个URL。希望能帮助SBTW通过打印data.buffer.bytellength检查AB的大小我可能会混淆buffer、ArrayBuffer和TypedArrays,现在是DataView。仍然不确定为什么data.buffer[0]会返回未定义的数据(如果存在)。那么拥有
.buffer
访问器有什么意义呢?现在让我们先忘掉ArrayBuffer。所以你想获取数据并将其转换为音频缓冲区,对吗?