【问题标题】:Cannot assign values to typed array buffer无法将值分配给类型化数组缓冲区
【发布时间】:2016-11-07 07:10:44
【问题描述】:

为什么没有按预期分配值?不会抛出任何错误。

fs = require('fs');
var path="data.dat";
var f = fs.createReadStream(path,{highWaterMark:1024*1024*128})
var stat = fs.statSync(path);
var stream = fs.createReadStream(path,{start:0,end:stat.size-1});
var dat = new Float64Array(stat.size);
var idx = 0;
stream.on('data',(chunk)=>{
    var temp = new Float64Array((new Uint8Array(chunk)).buffer);
    for(var i = 0; i< temp.length;++i){
        dat[idx++]=temp[i];
        console.log(temp[i]); //this will log the expected values
        console.log(dat[idx]); //this will log a bunch of 0
    }

});
stream.on('end',function(){
    //do_stuff(dat);
});

【问题讨论】:

  • 要打印 dat 值,您应该使用 idx 并且不要再增加它。
  • 糟糕,这是一个复制和粘贴错误(现已更正)。但它仍然不起作用。整个数组是一堆0。
  • 您已将 idx 增加了两次。为了使代码更易于遵循,只需删除内联 ++,然后在块的末尾再执行一行 idx++。还要查看您没有考虑任何 Float64 长度的代码。
  • 对不起,如果你在数组中使用索引并增加它,你指向下一个值,这里不存在。您应该使用 idx-1 来获取您使用的索引,因为增量在使用变量 id 之后起作用。

标签: javascript node.js variable-assignment typed-arrays


【解决方案1】:

Urrgg...我觉得问起来很愚蠢。答案是 console.log(dat[idx-1]);

【讨论】:

  • 对 :) 不过别傻了,大部分问题都是这样的。
  • 我也犯了一个错误,试图访问 .on('end' 之外的变量,这让我看起来好像只有一堆 0
猜你喜欢
  • 2021-03-03
  • 1970-01-01
  • 2017-10-05
  • 2019-05-01
  • 2016-10-14
  • 2016-12-21
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多