Node.js 缓冲区(Buffer)

  • 缓冲区

    纯JavaScript是Unicode友好的,但是对于二进制数据却不是。在处理TCP流或文件系统时,必须处理八位位组流。Node提供了Buffer类,该类提供了实例来存储类似于整数数组的原始数据,但对应于V8堆外部的原始内存分配。Buffer类是可以在应用程序中全局访问,而无需导入缓冲区模块。
  • 创建缓冲区

    Node缓冲区可以通过多种方式构造。
    方法一
    以下是创建10个八位字节的未初始化缓冲区的语法-
    
    var buf = Buffer.alloc(10);
    
    方法2
    以下是从给定数组创建Buffer的语法-
    
    var buf = Buffer.from([10, 20, 30, 40, 50]);
    
    方法3
    以下是从给定的字符串和可选的编码类型创建Buffer的语法-
    
    var buf = Buffer.from("Simply Easy Learning", "utf-8");
    
    尽管“utf8”是默认编码,但是您可以使用以下任何一种编码:“ascii”,“ utf8”,“ utf16le”,“ ucs2”,“base64”或“ hex”。
  • 写入缓冲区

    以下是写入Node缓冲区的方法的语法-
    
    buf.write(string[, offset][, length][, encoding])
    
    参数
    • string - 这是要写入缓冲区的字符串数据。
    • offset- 这是开始写入缓冲区的索引。预设值为0。
    • length - 这是要写入的字节数。默认为buffer.length。
    • encoding - 编码使用。'utf8'是默认编码。
    返回值
    此方法返回写入的八位位组数。如果缓冲区中没有足够的空间来容纳整个字符串,它将写入字符串的一部分。
    示例
    
    buf = Buffer.alloc(256);
    len = buf.write("Simply Easy Learning");
    
    console.log("Octets written : "+  len);
    
    尝试一下
  • 从缓冲区读取

    以下是从Node缓冲区读取数据的方法的语法-
    
    buf.toString([encoding][, start][, end])
    
    参数
    • encoding - 编码使用。'utf8'是默认编码。
    • start- 开始指数开始读取,默认为0。
    • end - 结束索引以结束读取,默认为完整缓冲区。
    返回值
    此方法从使用指定字符集编码编码的缓冲区数据中解码并返回字符串。
    示例
    
    buf = Buffer.alloc(26);
    for (var i = 0 ; i < 26 ; i++) {
      buf[i] = i + 97;
    }
    
    console.log( buf.toString('ascii'));       // outputs: abcdefghijklmnopqrstuvwxyz
    console.log( buf.toString('ascii',0,5));   // outputs: abcde
    console.log( buf.toString('utf8',0,5));    // outputs: abcde
    console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde
    
    尝试一下
  • 将缓冲区转换为JSON

    以下是将Node缓冲区转换为JSON对象的方法的语法-
    
    buf.toJSON()
    
    返回值
    此方法返回Buffer实例的JSON表示形式。
    示例
    
    var buf = Buffer.from('Simply Easy Learning');
    var json = buf.toJSON(buf);
    
    console.log(json);
    
    尝试一下
  • 串联缓冲区

    以下是将Node缓冲区连接到单个Node缓冲区的方法的语法--
    
    Buffer.concat(list[, totalLength])
    
    参数
    • list - 缓冲区的数组列表对象要连接。
    • totalLength- 这是连接时缓冲区的总长度。
    返回值
    此方法返回一个Buffer实例。
    示例
    
    var buffer1 = Buffer.from('蝴蝶教程 ');
    var buffer2 = Buffer.from('简单易学');
    var buffer3 = Buffer.concat([buffer1,buffer2]);
    
    console.log("buffer3 内容: " + buffer3.toString());
    
    尝试一下
  • 比较缓冲区

    以下是比较两个Node缓冲区的方法的语法---
    
    buf.compare(otherBuffer);
    
    参数
    • otherBuffer - 这是另一个缓冲区,将与buf比较
    返回值
    返回一个数字,该数字指示它按排序顺序在otherBuffer之前还是之后。
    示例
    
    var buffer1 = Buffer.from('ABC');
    var buffer2 = Buffer.from('ABCD');
    var result = buffer1.compare(buffer2);
    
    if(result < 0) {
       console.log(buffer1 +" comes before " + buffer2);
    } else if(result === 0) {
       console.log(buffer1 +" is same as " + buffer2);
    } else {
       console.log(buffer1 +" comes after " + buffer2);
    }
    
    尝试一下
  • 复制缓冲区

    以下是复制Node缓冲区的方法的语法-
    
    buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
    
    参数
    • targetBuffer - 将在其中复制缓冲区的Buffer对象。
    • targetStart - 数字,可选,默认值:0
    • sourceStart - 数字,可选,默认值:0
    • sourceEnd - 数字,可选,默认值:buffer.length
    返回值
    没有返回值。即使目标存储区与源重叠,也将数据从此缓冲区的区域复制到目标缓冲区中的区域。如果未定义,则targetStart和sourceStart参数默认为0,而sourceEnd默认为buffer.length。
    示例
    
    var buffer1 = Buffer.from('ABC');
    
    //copy a buffer
    var buffer2 = Buffer.alloc(3);
    buffer1.copy(buffer2);
    console.log("buffer2 content: " + buffer2.toString());
    
    尝试一下
  • 切片缓冲区

    以下是获取Node缓冲区的子缓冲区的方法的语法--
    
    buf.slice([start][, end])
    
    参数
    • start - 数字,可选,默认值:0
    • end - 数字,可选,默认:buffer.length
    返回值
    返回一个新缓冲区,该缓冲区引用与旧缓冲区相同的内存,但偏移量并由开始(默认为0)和结束(默认为buffer.length)索引进行裁剪。负索引从缓冲区的末尾开始。
    示例
    
    var buffer1 = Buffer.from('jc2182');
    
    //slicing a buffer
    var buffer2 = buffer1.slice(0,3);
    console.log("buffer2 content: " + buffer2.toString());
    
    尝试一下
  • 缓冲区长度

    以下是获取以字节为单位的Node缓冲区大小的方法的语法---
    
    buf.length;
    
    返回值
    返回缓冲区的大小(以字节为单位)。
    示例
    
    var buffer = Buffer.from('jc2182');
    
    //length of the buffer
    console.log("buffer length: " + buffer.length);
    
    尝试一下