zoukankan      html  css  js  c++  java
  • nodejs通过buffer传递数据到前端,前端通过arraybuffer接收数据

    以后端传送threejs中的点阵数组为例:

    后端:

    let buffer = Buffer.alloc((points.length + 4) * 4)
    
    //points.length + 4:预留前四个数字为其他信息(比如两个数字为一组,或者三个数字为一组)
     
    //预留位置
    buffer.writeFloatLE(1, 0)
    buffer.writeFloatLE(2, 4)
    buffer.writeFloatLE(3, 8)
    buffer.writeFloatLE(4, 12)
    
    //buffer前四个数为信息
    //point数据从第16位开始写入
    for (let i = 0, len = points.length; i < len; i++) {
      buffer.writeFloatLE(points[i], i * 4 + 16)
    }
    res.send(buffer)
     
    前端:
    let pointXhr = new XMLHttpRequest()
    pointXhr.onreadystatechange = function () {
      var DONE = pointXhr.DONE || 4;
      if (pointXhr.readyState === DONE) {
        let buffer = pointXhr.response
        let bufferArray = new Float32Array(buffer);
        for (var i = 0; i < buffer.length; ++i) {
          bufferArray[i] = buffer[i];
        }
        let pointsArray = bufferArray.slice(4)
        let points = []
        //pointsArray 点阵从第5个开始(前四个数为其他信息)
        for (let i = 0, l = pointsArray.length / 3; i < l; i++) {
          points.push({
            x: pointsArray[i * 3],
            y: pointsArray[i * 3 + 1],
            z: pointsArray[i * 3 + 2]
          })
        }
        callback(points)
      }
    }
    pointXhr.open("POST",url,true);
    pointXhr.responseType = 'arraybuffer';
    pointXhr.send(null);
     
     
    前端接收图片buffer
    let imageXhr = new XMLHttpRequest()
    imageXhr.onreadystatechange = function () {
      var DONE = imageXhr.DONE || 4;
      if (imageXhr.readyState === DONE) {
        if (imageXhr.response) {
          let bufferArray = imageXhr.response
          let uint8Array = new Uint8Array(bufferArray);
          for (var i = 0; i < bufferArray.length; ++i) {
          uint8Array[i] = bufferArray[i];
        }
        callback(uint8Array)
        }
      }
    }
    imageXhr.open("POST",url,true);
    imageXhr.responseType = 'arraybuffer';
    imageXhr.send(null);
  • 相关阅读:
    表达式计算 java 后缀表达式
    动态规划略有所得 数字三角形(POJ1163)
    SharedPreferences的基本数据写入和读取
    安卓 io流 写入文件,再读取的基本使用
    SqLite的基本使用
    安卓手机开机开启指定Activity
    Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla
    广播的基本使用,判断是否有可用网络,并弹出设置窗口
    AsyncTask下载网络图片的简单应用
    Intellij_idea-14官方快捷键中文版
  • 原文地址:https://www.cnblogs.com/brainworld/p/8662128.html
Copyright © 2011-2022 走看看