美文网首页
Node Buffer模块常用方法

Node Buffer模块常用方法

作者: 弱冠而不立 | 来源:发表于2020-09-18 20:35 被阅读0次

    Buffer 类被引入作为 NodeJS API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。Buffer 对象用于表示固定长度的字节序列。
    Buffer 属于 Global 对象,使用时不需引入,且 Buffer 的大小在创建时确定,无法调整。

    • 创建
      • Buffer.alloc(bufferLen)Buffer.allocUnsafe(bufferLen)
    const { Buffer } = require("buffer");
    let buf1 = Buffer.alloc(1);
    let buf2 = Buffer.allocUnsafe(1);
    
    console.log(buf1);
    console.log(buf2);
    
    Buffer.alloc 创建的Buffer是被初始化过的,即每一项都用 00 填充。而 Buffer.allocUnsafe 创建的Buffer并没有经过初始化,是直接使用内存中闲置的缓冲区
    • Buffer.from(string/array/buffer, unicode)
    const { Buffer } = require("buffer");;
    let bufFromStr = Buffer.from("hello world", "utf-8");
    let bufFromArr = Buffer.from([1,10,"8","$"]);
    let bufFromBuffer = Buffer.from(bufFromStr);
    
    console.log(bufFromStr);
    console.log(bufFromArr);
    console.log(bufFromBuffer);
    console.log(bufFromBuffer == bufFromStr);
    bufFromStr =  bufFromArr;
    console.log(bufFromBuffer);
    
    Buffer.from 获取的会重新创建一个全新的地址,而不是直接引用之前的地址
    • 填充:buf.fill(value, start=0, end=bufferLen)

    value:将要填充的数据;
    start:填充数据的开始位置,不指定默认为 0;
    end:填充数据的结束位置,不指定默认为 Buffer 的长度。

    let buf1 = Buffer.alloc(3);
    let buf2 = Buffer.alloc(3);
    
    console.log(buf1.fill(1));
    console.log(buf2.fill(1,0,1));
    
    buf1 将所有位置都填充,而 buf2 只是从下标为 0 开始填充,填充的长度为 1
    • 复制:buf.copy(target, targetStart, sourceStart, sourceEnd)

    target:目标 Buffer
    targetStart:目标 Buffer 的起始位置
    sourceStart:源 Buffer 的起始位置
    sourceEnd:源 Buffer 的结束位置(不包含)

    let buf1 = Buffer.alloc(3);
    let buf2 = Buffer.alloc(3);
    
    buf1.fill(abc);
    
    buf1.copy(buf2,1,0,1);
    
    console.log(buf1);
    console.log(buf2);
    
    从 buf1 0 号位置开始复制到 1 号(不包括)位置,至 buf2 的 1 号位置
    • 截取 (类似字符串,数组):buf.slice
    • 查找 (类似字符串,数组):buf.indexOf
    • 拼接(类似字符串,数组):buf.concat

    相关文章

      网友评论

          本文标题:Node Buffer模块常用方法

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