【发布时间】:2020-04-26 09:26:33
【问题描述】:
我正在尝试返回一个二进制浮点数组。 我从 geotiff 库中得到一个 Float32Array,但是 http 只能 返回一个字符串或缓冲区,因此我必须将其“转换”为缓冲区。
const tiff = await geotiff.fromUrl(ahnUrl);
const image = await tiff.getImage();
const data = await image.readRasters(); <-- Is Float32Array
res.writeHead(200, {'Content-Type': 'application/octet-stream'});
var buf = Buffer.allocUnsafe( data.width * data.height );
for ( var y = 0; y < data.height; y++ )
{
for ( var x = 0; x < data.width; x++ )
{
buf.writeFloatLE(data[y*data.width+x]);
}
}
// buf = Buffer.from(data); <-- does not work
// buf = Buffer.from(data.buffer); neither
res.end(buf);
问题是双重for循环,我不想要这个。 理想情况下,没有额外的数据副本,绝对不是这个 非常慢的双 for 循环。速度非常关键。
我是 javascript/nodejs 的新手,但 Float32Array 似乎是多维的 它的长度返回 1,但它的宽度和高度是 1024x1024(如预期的那样)。
'const buf = Buffer.from(data)' 的结果是一个单字节长度的缓冲区。
【问题讨论】:
标签: javascript node.js