nodejs 讀取並處理二進制文件

項目中因板子存儲能力有限,直接將曲線的點存儲爲二進制文件,nodejs直接讀取二進制文件,讀取完將文件刪除node

 

 

 

解釋:ui

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

//先判斷底層系統是否生成新的文件,若是不存在返回給  頁面一個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{blog

//若文件存在,則讀取文件
  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=[];get

                    //遍歷buffer中的每個二進制it

                    //二進制文件以下io

                   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 0000console

      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])
      }function

                    //讀取完畢後,刪除文件
       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),
}
}

}

相關文章
相關標籤/搜索