• nodejs 读取并处理二进制文件


    项目中因板子存储能力有限,直接将曲线的点存储为二进制文件,nodejs直接读取二进制文件,读取完将文件删除

    解释:

    module.exports = function(sender){
    var fs= require('fs');   //使用nodejs的FS文件模块

    //先判断底层系统是否生成新的文件,如果不存在返回给  页面一个wait,则页面上不做操作
    fs.open("CurveData0.cdb",'r',function(err,result){
      if(err){
        if(err.code == "ENOENT"){
        console.log("文件和目录不存在")
        sender.success('wait')
      }else{
        console.log("打开文件失败")
        sender.error(err)
      }

    }else{

    //若文件存在,则读取文件
      fs.readFile(result,function(err, bytes){
        if(err){
          console.log("读取文件失败")
          sender.error(err)
        }else{
          var buf=new Buffer(bytes); //将文件中读取的二进制数据,存入一个buffer对象
          var offset=0;
          var list = [];
          var line1=[];

                        //遍历buffer中的每一个二进制

                        //二进制文件如下

                       0000 2d00 0000 0000 0000 0000 0000 
                       0100 3100 0000 0000 0000 0000 0000 
                       0200 3600 0000 0000 0000 0000 0000 
             0300 3a00 0000 0000 0000 0000 0000 
          0400 3e00 0000 0000 0000 0000 0000 
          0500 4300 0000 0000 0000 0000 0000 
          0600 4700 0000 0000 0000 0000 0000 
          0700 4b00 0000 0000 0000 0000 0000

          while(offset<buf.length){
            list.push(readRecord(buf,offset))  //前两个byte为时间   后面12个  每两个byte 为一个数据点
            offset+=14
          }
          var charttime=new Date().getTime()+28800000-3000
          for(var i=0;i<list.length;i++){
            line1.push([charttime+i,list[i].value1])
          }

                        //读取完毕后,删除文件
           fs.unlink("CurveData0.cdb",function(err,result){
           if(err){
             console.log("删除失败")
           }
         })
        sender.success(line1)
     }
    })
    }
    })

    readIntLE:小端对齐转换二进制为十进制
    function readRecord(buf,offset){
    return{
    time:buf.readIntLE(offset,2),
    value1:buf.readIntLE(offset+2,2),
    value2:buf.readIntLE(offset+4,2),
    value3:buf.readIntLE(offset+6,2),
    value4:buf.readIntLE(offset+8,2),
    value5:buf.readIntLE(offset+10,2),
    value6:buf.readIntLE(offset+12,2),
    }
    }

    }

  • 相关阅读:
    9-16.复选框
    9-14.时间输入框,颜色选择器和文件域
    Safari的表格用col预定义宽度,配合table-layout:fixed.但是单元格仍会被撑开
    了解git
    统计对象的length
    对于数组的操作:splice与slice
    margin啥时候取较大值
    页面上clientTop,offsetTop,scrollTop的理解,js元素的event.x/.clientX等位置的理解
    ie下滚动时利用定位position改变元素位置会严重抖动
    npm安装包出现NO为4048的错误,一直提示说要用管理员身份登录
  • 原文地址:https://www.cnblogs.com/nazi549038167/p/8865510.html
Copyright © 2020-2023  润新知