• Node.js中Buffer API详解


    Node.js中Buffer API详解

    在Node.js中,Buffer是一个用于处理二进制数据流的全局对象,它类似于数组,但可以存储任意大小的数据。Buffer对象是由C++代码实现的底层结构,而JavaScript代码则提供了一些高级的API。本文将介绍Node.js中Buffer的各种API,包括创建、读写、转换、比较等。

    Buffer的创建

    在Node.js中,可以通过多种方式创建Buffer对象,包括使用字符串、数组、数字等作为参数。下面是一些常见的创建Buffer对象的方式:

    1. Buffer.alloc(size[, fill[, encoding]])

    创建一个指定大小的Buffer对象,并将所有字节初始化为0或指定的fill值。

    const buf = Buffer.alloc(5);
    console.log(buf);  // 
    
    • 1
    • 2

    2. Buffer.allocUnsafe(size)

    创建一个指定大小的Buffer对象,但不会初始化所有字节,可能包含敏感数据。

    const buf = Buffer.allocUnsafe(5);
    console.log(buf);  // 
    
    • 1
    • 2

    3. Buffer.from(array)

    创建一个包含指定数组元素的Buffer对象。

    const buf = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]);
    console.log(buf);  // 
    
    • 1
    • 2

    4. Buffer.from(string[, encoding])

    创建一个包含指定字符串的Buffer对象。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf);  // 
    
    • 1
    • 2

    Buffer的读写

    在Node.js中,可以使用一些API对Buffer进行读写操作,包括读取、写入、拷贝、比较等。下面是一些常见的读写Buffer的API:

    1. 读取数据

    buf[index]

    获取指定位置的字节。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf[0]);  // 104
    
    • 1
    • 2
    buf.toString([encoding[, start[, end]]])

    将Buffer对象转换成字符串。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.toString('utf8'));  // 'hello'
    
    • 1
    • 2
    buf.toJSON()

    将Buffer对象转换成JSON对象。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.toJSON());  // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }
    
    • 1
    • 2

    2. 写入数据

    buf[index] = value

    设置指定位置的字节为指定值。

    const buf = Buffer.alloc(5);
    buf[0] = 104;
    console.log(buf);  // 
    
    • 1
    • 2
    • 3
    buf.write(string[, offset[, length]][, encoding])

    将指定字符串写入Buffer对象中。

    const buf = Buffer.alloc(5);
    buf.write('hello');
    console.log(buf);  // 
    
    • 1
    • 2
    • 3

    3. 拷贝数据

    buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

    将一个Buffer对象中的数据拷贝到另一个Buffer对象中。

    const buf1 = Buffer.from('hello');
    const buf2 = Buffer.alloc(3);
    buf1.copy(buf2);
    console.log(buf2);  // 
    
    • 1
    • 2
    • 3
    • 4

    4. 比较数据

    buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])

    比较两个Buffer对象的大小关系,返回值为-1、0或1,分别表示第一个Buffer对象小于、等于或大于第二个Buffer对象。

    const buf1 = Buffer.from('hello');
    const buf2 = Buffer.from('world');
    console.log(buf1.compare(buf2));  // -1
    
    • 1
    • 2
    • 3

    Buffer的转换

    在Node.js中,可以使用一些API将Buffer对象转换成其他类型的数据,包括字符串、数组、数字等。下面是一些常见的Buffer转换API:

    1. Buffer.concat(list[, totalLength])

    将多个Buffer对象拼接成一个Buffer对象。

    const buf1 = Buffer.from('hello');
    const buf2 = Buffer.from('world');
    const buf = Buffer.concat([buf1, buf2]);
    console.log(buf);  // 
    
    • 1
    • 2
    • 3
    • 4

    2. buf.toString([encoding[, start[, end]]])

    将Buffer对象转换成字符串。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.toString('utf8'));  // 'hello'
    
    • 1
    • 2

    3. buf.toJSON()

    将Buffer对象转换成JSON对象。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.toJSON());  // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }
    
    • 1
    • 2

    4. buf.values()

    返回一个包含Buffer对象中所有字节值的迭代器。

    const buf = Buffer.from('hello', 'utf8');
    for (const byte of buf.values()) {
      console.log(byte);
    }
    
    • 1
    • 2
    • 3
    • 4

    Buffer的其他API

    除了上述API外,Node.js中还有一些其他的Buffer API,包括:

    1. buf.byteLength

    获取Buffer对象的字节长度。

    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.byteLength);  // 5
    
    • 1
    • 2

    2. buf.slice([start[, end]])

    截取一个Buffer对象的一部分,返回一个新的Buffer对象。

    const buf1 = Buffer.from('hello');
    const buf2 = buf1.slice(0, 2);
    console.log(buf2);  // 
    
    • 1
    • 2
    • 3

    3. buf.fill(value[, offset[, end]][, encoding])

    将Buffer对象中的所有字节设置为指定值。

    const buf = Buffer.alloc(5);
    buf.fill(0);
    console.log(buf);  // 
    
    • 1
    • 2
    • 3

    总结

    本文介绍了Node.js中Buffer的各种API,包括创建、读写、转换、比较等。Buffer是Node.js中一个非常重要的对象,它可以方便地处理二进制数据流,在网络通信、文件操作、加密解密等领域都有广泛的应用。如果您是一名Node.js开发者,那么熟悉Buffer的相关知识是必不可少的。

  • 相关阅读:
    每日一题:吃透大文件上传问题(附可运行的前后端源码)
    【Linux】:权限
    如何写好设计文档
    python如何给正文内容加富文本标签
    Selenium的定位方式
    tinymce prism代码高亮图文详解
    安装Ubuntu提示:系统找不到指定的文件。
    初识操作系统
    K8s(Kubernetes)学习(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job
    【Go】单例模式与Once源码
  • 原文地址:https://blog.csdn.net/weiyi47/article/details/133842688