• nodeJS中buffer简单介绍


    --

    JavaScript 语言没有二进制数据类型。

    什么是buffer:

    中文翻译:缓冲区;是指输入输出数据的一段内存。

     1. 定义Buffer

    方式一:通过长度定义

    const buffer = Buffer.alloc(10);
    const buffer2 = Buffer.allocUnsafe(10);

    创建长度为10且为初始化的buffer

    Buffer.alloc()方法与Buffer.allocUnsafe()的区别是什么?

    在生成buffer的过程中需要两步走

    1、申请内存空间

    2、申请的内存空间进行填充

      但是 Buffer.allocUnsafe()只完成了第一步,没有完成第二步,所以会速度会比Buffer.alloc()快,但是会存在问题,就是申请的空间可能“残留了”以前内存上的数据。我们称为敏感数据

    let buffer = Buffer.alloc(10); // <Buffer 00 00 00 00 00 00 00 00 00 00>
    let buffer2 = Buffer.allocUnsafe(10); // <Buffer 00 00 00 00 00 00 00 00 08 a4>

    非00的即为敏感数据。

    Buffer.alloc()完成了两步,在第二步把所有的旧数据清除掉,填充成0。
    所以一般为了避免不可描述的漏洞产生,不建议使用Buffer.allocUnsafe().

     方式二:字符串创建

    const buffer = Buffer.from('tom') // <Buffer 74 6f 6d>

    方式三:数组创建

    const buffer = Buffer.from([1,2,3]) // <Buffer 01 02 03>

    2. buffer常用方法

    (1)buffer.fill() 用来填充buffer的内容

    const buffer = Buffer.alloc(5)
    buffer.fill(2)
    console.log(buffer);  // <Buffer 02 02 02 02 02>

    (2)buffer.write() 用来向buffer中写入指定内容

    const buffer = Buffer.alloc(10)
    buffer.write('tom', 0, 4, 'utf-8');
    console.log(buffer); // <Buffer 74 6f 6d 00 00 00 00 00 00 00>
    console.log(buffer.toString('utf-8')); // tom

    (3)buffer.toString() 将buffer转化为其他编码

    const buffer = Buffer.from('tom')
    console.log(buffer); // <Buffer 74 6f 6d>
    console.log(buffer.toString()); // tom

    (4)buffer.slice()截取buffer 不会改变原buffer返回一个新buffer

    let buffer = Buffer.from('tom');
    let sliceBuffer = buffer.slice(0,2);
    console.log(buffer, sliceBuffer); // <Buffer 74 6f 6d> <Buffer 74 6f>

    (5)buffer.copy() 将其他buffer拷贝到一个buffer上 参数 [source, targetStart, sourceStart, sourceEnd]

    let buffer = Buffer.alloc(6);
    let buffer1 = Buffer.from('tom');
    let buffer2 = Buffer.from('jack');
    buffer1.copy(buffer, 0, 0, 2);
    buffer2.copy(buffer, 2, 0, 4)
    console.log(buffer, buffer.toString('utf-8')); // <Buffer 74 6f 6a 61 63 6b> tojack

    (6)Buffer.concat()拼接buffer,注意此方法是在Buffer上的。

    let buffer1 = Buffer.from('tom');
    let buffer2 = Buffer.from('jack');
    let buffer3 = Buffer.concat([buffer1, buffer2]);
    console.log(buffer3, buffer3.toString('utf-8')); // <Buffer 74 6f 6d 6a 61 63 6b> tomjack

    (7)Buffer.isBuffer()判断是否是Buffer

    let buffer = Buffer.from('tom');
    console.log(Buffer.isBuffer(buffer)); // true

    (8)buffer.length buffer的长度

    let buffer = Buffer.from('tom');
    console.log(buffer.length); // 3

    --

  • 相关阅读:
    python 数据结构与算法 day04 冒泡排序
    阿里代码扫描插件安装 (IDEA)
    Kafka
    女生赛训练 2
    2019 DISCS PrO High School Division
    计算机安全之密码安全 从 Hash 到 MD5
    CodeForces Round #559 Div.2
    CodeForces Round #558 Div.2
    CodeForces Round #560 Div.3
    NCD 2019 (AK)
  • 原文地址:https://www.cnblogs.com/fqh123/p/15835500.html
Copyright © 2020-2023  润新知