美文网首页node专题
Nodo学习之Buffer学习记录

Nodo学习之Buffer学习记录

作者: Mstian | 来源:发表于2020-11-11 16:34 被阅读0次

    Buffer是什么?
    中文翻译为缓冲区,是指暂存输入输出数据的一段内存

    导图

    1. 定义Buffer
    方式一:通过长度定义

    let buffer = Buffer.alloc(10);
    let 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().

    方式二:字符串创建

    let buffer = Buffer.form('lucy');
    

    方式三:数组创建

    let buffer = Buffer.from([1,2,3]);
    

    2. buffer常用方法

    1. buffer.fill() 用来填充buffer的内容
    let buffer = Buffer.alloc(5);
    buffer.fill(2);
    console.log(buffer); // <Buffer 02 02 02 02 02 02 02 02 02 02>
    
    1. buffer.write() 用来向buffer中写入指定内容
    let buffer = Buffer.alloc(10);
    buffer.write('lisa', 0, 4, 'utf-8');
    console.log(buffer.toString('utf-8')); // lisa
    
    1. buffer.toString() 将buffer转化为其他编码
    let buffer = Buffer.from('lisa');
    console.log(buffer); // <Buffer 6c 69 73 61>
    console.log(buffer.toString('utf-8')); // lisa
    
    1. buffer.slice()截取buffer 不会改变原buffer返回一个新buffer
    let buffer = Buffer.from('lisa');
    let sliceBuffer = buffer.slice(0,2);
    console.log(buffer, sliceBuffer); // <Buffer 6c 69 73 61> <Buffer 6c 69>
    
    1. buffer.copy()将其他buffer拷贝到一个buffer上 参数 [source, targetStart, sourceStart, sourceEnd]
    let buffer = Buffer.alloc(8);
    let buffer1 = Buffer.from('lisa');
    let buffer2 = Buffer.from('jack');
    buffer1.copy(buffer, 0, 0, 4);
    buffer2.copy(buffer, 4, 0, 4)
    console.log(buffer, buffer.toString('utf-8')); // <Buffer 6c 69 73 61 6a 61 63 6b> lisajack
    
    1. Buffer.concat()拼接buffer,注意此方法是在Buffer上的。
    let buffer1 = Buffer.from('lisa');
    let buffer2 = Buffer.from('jack');
    let buffer = Buffer.concat([buffer1, buffer2])
    console.log(buffer, buffer.toString('utf-8')); // <Buffer 6c 69 73 61 6a 61 63 6b> lisajack
    
    1. Buffer.isBuffer()判断是否是Buffer
    let buffer = Buffer.from('lisa');
    console.log(Buffer.isBuffer(buffer)); // true
    
    1. buffer.length buffer的长度
    let buffer = Buffer.from('lisa');
    console.log(buffer.length); // 4
    

    http://nodejs.cn/api/buffer.html
    Node闲谈之Buffer

    相关文章

      网友评论

        本文标题:Nodo学习之Buffer学习记录

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