什么是在node.js上将float32array保存到磁盘的紧凑方法?

 lxm淡淡嘚甜_671 发布于 2023-02-13 16:47

JSON.stringify显然不是节省空间的.使用Node.js序列化和存储float32array的最优雅方法是什么?

编辑:人们正在结束这个问题,原因包括"基于意见"和"对问题缺乏了解".我认真地相信第一个是missclick.对于第二个,也许这使得它更清楚:

var fs = require("fs");
var len = 1000*1000*10;
var big_array = new Float32Array(len);
for (var i=0; i

它不是空间效率,因为你将数字表示为字符串,因此8字节浮点数将使用~20 utf8字符,这是一种浪费.问题是:如何以节省空间的方式存储阵列?

1 个回答
  • 最后我设法用nodejs将float32array写入磁盘并在浏览器上检索它们,我希望它能帮到你.

    将Float32Array写入NodeJS中的二进制文件

        var fs = require('fs');
        var wstream = fs.createWriteStream('data.dat');
    
        var data = new Float32Array([1.1,2.2,3.3,4.4,5.5]);
    
        //prepare the length of the buffer to 4 bytes per float
        var buffer = new Buffer(data.length*4);
    
    
        for(var i = 0; i < data.length; i++){
            //write the float in Little-Endian and move the offset
            buffer.writeFloatLE(data[i], i*4);
        }
    
        wstream.write(buffer);
        wstream.end();
    

    读取文件并将其转换为浏览器上的Float32Array

        var urlToFloatFile = 'data.dat';
        var request = new XMLHttpRequest();
        request.open('GET', urlToFloatFile, true);
    
        //specify the response type as arraybuffer
        request.responseType = 'arraybuffer';
    
        request.onload = function (msg) { 
            var yourFloatData = new Float32Array(this.response);
            console.log(yourFloatData);
        };
        request.send();
    

    感谢来自WebGL Dev List GGroup的@ben_a_adams https://groups.google.com/forum/#!topic/webgl-dev-list/EbGUi_iSEx8,了解客户端代码

    我创建了一个简单的测试来测试浮点数组的JSON序列化与二进制表示的差异大小,结果如下:

    2.000.000浮点值

    二进制文件上的7.8MB

    JSON文件上有38.5MB

    17.5在Gzipped JSON文件上

    2023-02-13 16:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有