美文网首页
node.js 学习记录第五天buffer

node.js 学习记录第五天buffer

作者: 大白熊_8133 | 来源:发表于2018-11-12 20:44 被阅读0次

    缓冲 buffer

    创建

    Buffer类在Node.js中是全局变量,无需使用require('buffer')
    Buffer类的实例类似于整数数组,但Buffer的大小是固定的,在创建时确定,无法调整

    Buffer.alloc(size, fill, encoding)

    返回一个指定大小的被填满的 Buffer`实例。
    size:新建的Buffer期望长度
    fill 用来预填充新建的Buffer的值,默认为0
    encoding 如果fill是字符串,则该值是它的字符编码

    Buffer.allocUnsafe(size)

    调用Buffer.alloc()会明显地比另一个方法 Buffer.allocUnsafe()慢,但是能确保新建的Buffer实例的内容不会包含敏感数据。

    Buffer.from(array)

    返回一个被 array 的值初始化的新的 Buffer 实例,array必须是一个数组

    Buffer.from(arrayBuffer, byteOffset , length)

    返回一个新建的与给定的 ArrayBuffer共享同一内存的 Buffer。
    **改变原始的arraybuffer也会改变buffer
    arrayBuffer:ArrayBufferSharedArrayBuffer或 TypedArray的 .buffer属性。
    byteOffset:开始拷贝的索引,默认为0
    length:拷贝的字节数

    const arr=new Uint16Array(2);
    arr[0]=5000
    arr[1]=4000
    const buf=Buffer.from(arr.buffer)
    

    Buffer.from(buffer)

    返回一个新建的包含所提供的 Buffer 的内容的副本的 Buffer。只是拷贝和上一种方法并不同,改变原始buffer,不会改变后创建的

    Buffer.from(string, encoding)

    新建一个包含string的buffer,encoding参数指定string的字符编码

    写入缓冲区

    buf.write(string,offset,length,encoding)

    根据 encoding 的字符编码写入 string 到 buf 中的 offset 位置

    读取数据

    buf.toString(encoding,start,end)

    根据encoding指定的字符编码解码buf成一个字符串,start和end可传入用于只解码buf的一部分

    buf.toJSON()

    返回buf的JSON格式

    缓冲区操作

    合并Buffer.concat(list, totalLength)

    list - 用于合并的 Buffer 对象数组列表。

    比较buf.compare(otherBuffer)

    返回一个数字,表示buf在otherBuffer之前,之后或者相同

    拷贝buf.copy(targetBuffer, targetStart, sourceStart, sourceEnd)

    将buf拷贝到targetBuffer的targetStart位置

    裁剪buf.slice(start, end)

    长度 buf.length

    应用

    全部试一下

    //创建buffer,new buffer()已经被废弃了
    //创建一个由string组成的buffer
    const buf1=Buffer.alloc(10,'asdafadafs')
    console.log(buf1);
    //返回值为<Buffer 61 73 64 61 66 61 64 61 66 73>
    const buf2 = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
    console.log(buf2);
    //返回值<Buffer 62 75 66 66 65 72>
    const arr=new Uint8Array(5);
    //Uint8Array:8位无符号整数,长度1个字节。必须是ArrayBuffer所以直接用Array会报错
    arr[0]=0x62
    arr[1]=0x75
    arr[2]=0x66
    arr[3]= 0x66
    arr[4]= 0x65
    const buf3=Buffer.from(arr.buffer);
    console.log(buf3)
    //返回值<Buffer 62 75 66 66 65>
    arr[4]=0x72
    console.log(buf3);
    //返回值<Buffer 62 75 66 66 72>
    const buf4=Buffer.from(buf1)
    console.log(buf4);
    //返回值<Buffer 61 73 64 61 66 61 64 61 66 73>
    const buf5=Buffer.from("buffer")
    console.log(buf5)
    //返回值<Buffer 62 75 66 66 65 72>
    const buf6=Buffer.alloc(6)
    buf6.write("buffer")
    console.log(buf6)
    //返回值<Buffer 62 75 66 66 65 72>
    const str=buf6.toString();
    console.log(str)
    //返回值为buffer
    const jso=buf6.toJSON();
    console.log(jso)
    //返回值{ type: 'Buffer', data: [ 98, 117, 102, 102, 101, 114 ] }
    const buf7=Buffer.concat([buf1,buf6])
    const str2=buf7.toString()
    console.log(str2)
    //返回值asdafadafsbuffer
    console.log(buf1.compare(buf6))
    //返回值为-1,buf6在buf1后面
    buf6.copy(buf1,2)
    const str3=buf1.toString()
    console.log(str3)
    //返回值asbufferfs会把原来buffer相应位置值替换掉
    const buf8=buf1.slice(2,8)
    const str4=buf8.toString()
    console.log(str4)
    //返回值是buffer,第一个数字是起始位置,结束是返回的buffer最后一位后面那一位
    console.log(buf8.length)
    
    

    相关文章

      网友评论

          本文标题:node.js 学习记录第五天buffer

          本文链接:https://www.haomeiwen.com/subject/yjzoxqtx.html