【发布时间】: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