zoukankan      html  css  js  c++  java
  • javascript ArrayBuffer类型化数组和视图的操作

    个人理解类型化数据就是内存分配区域,不同数据的存储就是视图DataView咯

    var buffers = [];

    var json = {"id":100, "name": "中国"};
    var buf = new Buffer(JSON.stringify(json));

    定义一个ArrayBuffer

       var ab = new ArrayBuffer(6);//定义一个6字节的内存区域

       var abLength =  ab.byteLength;//6

       //检查内存分配是否成功则需要abLength做比较咯

       if(abLength === 6){ //成功 }else{ //失败 }

    ArrayBuffer可以存放多种类型的数据,而不同类型的存储方式就是DataView

    DataView的类型如下:

    • Int8Array:8位有符号整数,长度1个字节。
    • Uint8Array:8位无符号整数,长度1个字节。
    • Int16Array:16位有符号整数,长度2个字节。
    • Uint16Array:16位无符号整数,长度2个字节。
    • Int32Array:32位有符号整数,长度4个字节。
    • Uint32Array:32位无符号整数,长度4个字节。
    • Float32Array:32位浮点数,长度4个字节。
    • Float64Array:64位浮点数,长度8个字节。

    构造DataView,new DataView(ArrayBuffer); //参数必须存在,且必须是ArrayBuffer

    DataView视图提供以下方法写入内存:有三个参数第一个参数是字节序号,第二个参数为写入的数据,第三个参数则为true|false可选,true为低字节写入,默认为高字节写入

    • setInt8:写入1个字节的8位整数。
    • setUint8:写入1个字节的8位无符号整数。
    • setInt16:写入2个字节的16位整数。
    • setUint16:写入2个字节的16位无符号整数。
    • setInt32:写入4个字节的32位整数。
    • setUint32:写入4个字节的32位无符号整数。
    • setFloat32:写入4个字节的32位浮点数。
    • setFloat64:写入8个字节的64位浮点数。

         一下方法读取内存

    • getInt8:读取1个字节,返回一个8位整数。
    • getUint8:读取1个字节,返回一个无符号的8位整数。
    • getInt16:读取2个字节,返回一个16位整数。
    • getUint16:读取2个字节,返回一个无符号的16位整数。
    • getInt32:读取4个字节,返回一个32位整数。
    • getUint32:读取4个字节,返回一个无符号的32位整数。
    • getFloat32:读取4个字节,返回一个32位浮点数。
    • getFloat64:读取8个字节,返回一个64位浮点数。

    //数据的存储

    var dv = new DataView(ab);

    dv.setUint16(0, Math.pow(2, 16) - 1);

    dv.setUint16(2, Math.pow(2, 16) - 2);

    dv.setUint16(4, buf.length);

    buffers.push(new Buffer(new Uint8Array(ab)));

    buffers.push(buf);

    var resBuf = Buffer.concat(buffers);//最总组合的buffer;

    //数据的解包

    var a1 = resBuf.readUInt16BE(0);//从缓存对象读取一个 16 位无符号整型数值,以高字节序的存储方式

    var a2 = resBuf.readUInt16BE(2);

    var a3 = resBuf.readUInt16BE(4);

    var str = resBuf.slice(6, a3 + 6);//取字符串内容

    最后,a1,a2,a3,str则为刚才存储的数据

  • 相关阅读:
    基础学习笔记之opencv(9):Mat图像扫描
    Android开发历程_7(ListView和ProgressBar控件的学习)
    基础学习笔记之opencv(13):基本绘图
    Qt学习之路_5(Qt TCP的初步使用)
    基础学习笔记之opencv(7):ubuntu下opencv在Qt中的使用
    EM算法学习笔记_1(对EM算法的简单理解)
    Android开发历程_1(从1个activity跳转到另一个activity)
    Matlab成长之路_1(图片,视频,摄像头的读取和显示)
    深入理解JavaScript系列(41):设计模式之模板方法
    深入理解JavaScript系列(44):设计模式之桥接模式
  • 原文地址:https://www.cnblogs.com/ajun/p/4173805.html
Copyright © 2011-2022 走看看