读取服务器流式数据时Float32Array无法push,是否选错数据结构?
问题原因及解决方案
你的代码执行到push语句就停止,核心原因是Float32Array属于TypedArray类型,它根本没有push()方法——调用不存在的方法会直接触发错误,导致代码终止运行。
TypedArray的核心特性
TypedArray(包括Float32Array、Uint8Array等)是固定长度的二进制数据缓冲区,创建时必须指定长度,或者基于已有缓冲区初始化,无法像普通JS数组那样动态添加元素。
正确的实现方式
可以先把解析后的数值存入普通数组,完成所有数据处理后再转换为Float32Array,既保留TypedArray的内存/性能优势,又能灵活处理流式数据:
var points = str.split("\n"); // 按换行分割输入内容 var tempArr = []; for (let i = 0; i < points.length; i++) { // 跳过空行,避免无效解析 if (!points[i].trim()) continue; var coords = points[i].split("_"); // 按'_'分割每行的数值 for(let j=0; j < coords.length; j++) { var coord = parseFloat(coords[j]); // 过滤无效数值,防止NaN混入数组 if (!isNaN(coord)) { tempArr.push(coord); } } } // 将普通数组转换为Float32Array var positions = new Float32Array(tempArr);
Float32Array是否适合该业务场景?
完全适合。Float32Array在存储大量数值数据时,比普通数组更节省内存,且在WebGL、数据传输等场景下性能更优。只要用正确的方式初始化和填充数据,它非常适合存储流式读取的坐标类数值数据。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

