Node.js中Buffer缓冲器的工作原理及使用方法有哪些?

2026-04-05 20:551阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1642个文字,预计阅读时间需要7分钟。

Node.js中Buffer缓冲器的工作原理及使用方法有哪些?

原文示例:本文实例讲述了node.js中Buffer缓冲器的原理与使用方法。分享给广大读者,仅供参考,具体如下:

一、什么是BufferBuffer缓冲器是用来存储输入和输出数据的内存段。JavaScript语言没有二进制数据类型,因此Buffer缓冲器是用来存储二进制数据的。

二、Buffer缓冲器的原理Buffer缓冲器内部使用一个固定大小的数组来存储数据。这个数组的大小在创建Buffer时就已经确定,并且不能改变。Buffer缓冲器内部的数据是以字节为单位进行存储的。

三、Buffer缓冲器的使用方法

1.创建Buffer缓冲器

- 使用Buffer.from(arrayBuffer):从已有的ArrayBuffer创建Buffer缓冲器。 - 使用Buffer.alloc(size):分配一个指定大小的Buffer缓冲器。 - 使用Buffer.allocUnsafe(size):分配一个指定大小的Buffer缓冲器,但可能包含旧数据,需要谨慎使用。

2. 读写Buffer缓冲器 - 使用Buffer.write(string[, offset[, length[, encoding]]]):向Buffer缓冲器写入字符串。 - 使用Buffer.toString([encoding[, start[, end]]]):从Buffer缓冲器读取字符串。 - 使用Buffer.readUInt8(offset):从Buffer缓冲器读取无符号8位整数。 - 使用Buffer.writeInt8(value[, offset[, unsigned]]): 向Buffer缓冲器写入无符号8位整数。

改写后的内容:本文实例介绍了node.js中的Buffer缓冲器及其应用。以下为简要内容,供大家参考:

一、Buffer缓冲器简介Buffer缓冲器用于存储输入和输出数据,是JavaScript处理二进制数据的关键工具。

二、Buffer缓冲器原理Buffer缓冲器通过固定大小的数组实现,以字节为单位存储数据。

三、Buffer缓冲器使用方法

1.创建Buffer缓冲器

- 从ArrayBuffer创建:Buffer.from(arrayBuffer) - 分配指定大小:Buffer.alloc(size) - 分配可能含旧数据的大小:Buffer.allocUnsafe(size)

2. 读写Buffer缓冲器 - 写入字符串:Buffer.write(string[, offset[, length[, encoding]]]) - 读取字符串:Buffer.toString([encoding[, start[, end]]]) - 读取无符号8位整数:Buffer.readUInt8(offset) - 写入无符号8位整数:Buffer.writeInt8(value[, offset[, unsigned]])

本文实例讲述了node.js中Buffer缓冲器的原理与使用方法。分享给大家供大家参考,具体如下:

一、什么是Buffer

Buffer缓冲器是用来存储输入和输出数据的一段内存。js语言没有二进制数据类型,在处理TCP和文件流的时候,就不是很方便了。

所以node.js提供了Buffer类来处理二进制数据,Buffer类是一个全局变量,Buffer在创建的时候大小就固定了,无法改变。

Buffer类的实例类似于由字节元素组成的数组,可以有效的表示二进制数据。

二、什么是字节

字节是计算机存储时的一种计量单位,一个字节等于8个位。一个位就代表0或1,每8个位(bit)组成一个字节(byte)。

字节是网络传输数据的基本单位,一个字节最大表示的十进制数是255。

三、什么是进制

进制是人为定义的带进位的计数方法,常见的有二进制,八进制,十六进制,和十进制。

将任意数字转换成不同进制

console.log(parseInt('12', 2)); console.log(parseInt('12', 8)); console.log(parseInt('12', 16)); console.log(parseInt('12', 10));

转换进制的另一种方法:

Node.js中Buffer缓冲器的工作原理及使用方法有哪些?

console.log((10).toString(2)); console.log((10).toString(8)); console.log((10).toString(16)); console.log((10).toString(10));

四、创建Buffer的方法

通过Buffer.alloc来创建指定长度Buffer

//创建6个字节的Buffer,用0填充数据 let buf1 = Buffer.alloc(6); console.log(buf1); //指定数字进行填充 let buf2 = Buffer.alloc(6, 2); console.log(buf2); //也可以指定字符进行填充,第三个参数表示字符编码,默认为utf8 let buf3 = Buffer.alloc(6, 'a', 'utf8'); console.log(buf3);

通过Buffer.allocUnsafe创建未初始化的Buffer,Buffer中的数据是未知的。

let buf = Buffer.allocUnsafe(6); console.log(buf);

通过字节数组创建一个Buffer

let buf = Buffer.from([1, 2, 3, 4, 5]); console.log(buf);

通过字符串创建一个Buffer,第二个参数表示字符编码,一个中文用3个字节表示。

let buf = Buffer.from('世界你好', 'utf8'); console.log(buf);

五、Buffer的一些常用方法

通过 fill() 以指定的数据填充Buffer

let buf = Buffer.alloc(12); console.log(buf); //参数一表示用来填充的值 //参数二表示开始的偏移量 //参数三表示结束的偏移量 //参数四表示字符编码 //偏移量的计算是左闭右开的区间,[start, end) buf.fill(1, 0, 2); console.log(buf); buf.fill(2, 2, 4); console.log(buf); buf.fill('A', 4, 6); console.log(buf);

通过 write() 向Buffer中写入数据

let buf = Buffer.alloc(12); console.log(buf); //参数一表示要写入的字符串 //参数二表示写入的偏移量 //参数三表示写入的字节数 //参数四表示字符编码 buf.write('世界', 0, 3); console.log(buf); console.log(buf.toString()); buf.write('世界', 3, 6); console.log(buf); console.log(buf.toString());

通过 writeInt8() 写入一个8位的整数,注意该整数是带符号的。

let buf = Buffer.alloc(12); console.log(buf); buf.writeInt8(1, 0); buf.writeInt8(2, 1); buf.writeInt8(3, 2); //注意,8位的整数,如果带符号,区间在 -128 到 127 之间 buf.writeInt8(127, 3); console.log(buf);

方法中还有一些writeInt16BE(),writeInt32BE(),writeInt16LE(),writeInt32LE()的方法。

因为不同的CPU架构,有不同的字节序,字节序是指数字在内存中保存的顺序。

以 BE 结尾的,表示 Big Endian ,将高位存储在起始位置。

以 LE 结尾的,表示 Little Endian,将低位存储在起始位置。

let buf = Buffer.alloc(6); //将高位存储在起始位置 buf.writeInt16BE('256', 0); // [01 00 00 00 00 00] console.log(buf); //读取要与写入的方法一致,不然数据会错乱。 console.log(buf.readInt16BE(0)); let buf2 = Buffer.alloc(6); //将低位存储在起始位置 buf2.writeInt16LE('256', 0); // [00 01 00 00 00 00] console.log(buf2); //读取要与写入的方法一致,不然数据会错乱。 console.log(buf.readInt16LE(0));

通过 toString() 方法,将Buffer解码成字符串。

let buf = Buffer.alloc(12); buf.write('世', 0, 3); buf.write('界', 3, 3); buf.write('你', 6, 3); buf.write('好', 9, 3); console.log(buf); console.log(buf.toString());

通过 slice() 创建一个新的Buffer切片,但是内存的指向与原Buffer仍然是同一块内存。

let buf = Buffer.alloc(12, 6); console.log(buf); //参数一表示开始切片偏移量 //参数二表示结束切片偏移量 let buf2 = buf.slice(0, 3); buf2.fill(9); console.log(buf);

通过 copy() 拷贝一个Buffer的数据到另一个Buffer

let t_buf = Buffer.alloc(12); let s_buf = Buffer.alloc(6); s_buf.write('世界', 0); console.log(s_buf.toString()); //参数一表示,拷贝进的Buffer //参数二表示,拷贝进Buffer的开始偏移量 //参数三表示,源Buffer的开始拷贝偏移量 //参数四表示,源Buffer的结束拷贝偏移量 s_buf.copy(t_buf, 0, 0, 6); console.log(t_buf.toString());

通过 Buffer.concat() 可以合并多个Buffer,返回一个新Buffer

let buf1 = Buffer.alloc(6); buf1.write('hello,'); let buf2 = Buffer.alloc(6); buf2.write('世界'); let buf3 = Buffer.concat([buf1, buf2]); console.log(buf3.toString()); //如果合并后的Buffer字节数大于设置的值,则会截断 let buf4 = Buffer.concat([buf1, buf2], 9); console.log(buf4.toString());

判断是否为一个Buffer

console.log(Buffer.isBuffer({'name': 'test'})); console.log(Buffer.isBuffer(Buffer.from('test')));

通过 Buffer.byteLength() 获取字符串字节长度

console.log(Buffer.byteLength('你好,世界'));

希望本文所述对大家node.js程序设计有所帮助。

本文共计1642个文字,预计阅读时间需要7分钟。

Node.js中Buffer缓冲器的工作原理及使用方法有哪些?

原文示例:本文实例讲述了node.js中Buffer缓冲器的原理与使用方法。分享给广大读者,仅供参考,具体如下:

一、什么是BufferBuffer缓冲器是用来存储输入和输出数据的内存段。JavaScript语言没有二进制数据类型,因此Buffer缓冲器是用来存储二进制数据的。

二、Buffer缓冲器的原理Buffer缓冲器内部使用一个固定大小的数组来存储数据。这个数组的大小在创建Buffer时就已经确定,并且不能改变。Buffer缓冲器内部的数据是以字节为单位进行存储的。

三、Buffer缓冲器的使用方法

1.创建Buffer缓冲器

- 使用Buffer.from(arrayBuffer):从已有的ArrayBuffer创建Buffer缓冲器。 - 使用Buffer.alloc(size):分配一个指定大小的Buffer缓冲器。 - 使用Buffer.allocUnsafe(size):分配一个指定大小的Buffer缓冲器,但可能包含旧数据,需要谨慎使用。

2. 读写Buffer缓冲器 - 使用Buffer.write(string[, offset[, length[, encoding]]]):向Buffer缓冲器写入字符串。 - 使用Buffer.toString([encoding[, start[, end]]]):从Buffer缓冲器读取字符串。 - 使用Buffer.readUInt8(offset):从Buffer缓冲器读取无符号8位整数。 - 使用Buffer.writeInt8(value[, offset[, unsigned]]): 向Buffer缓冲器写入无符号8位整数。

改写后的内容:本文实例介绍了node.js中的Buffer缓冲器及其应用。以下为简要内容,供大家参考:

一、Buffer缓冲器简介Buffer缓冲器用于存储输入和输出数据,是JavaScript处理二进制数据的关键工具。

二、Buffer缓冲器原理Buffer缓冲器通过固定大小的数组实现,以字节为单位存储数据。

三、Buffer缓冲器使用方法

1.创建Buffer缓冲器

- 从ArrayBuffer创建:Buffer.from(arrayBuffer) - 分配指定大小:Buffer.alloc(size) - 分配可能含旧数据的大小:Buffer.allocUnsafe(size)

2. 读写Buffer缓冲器 - 写入字符串:Buffer.write(string[, offset[, length[, encoding]]]) - 读取字符串:Buffer.toString([encoding[, start[, end]]]) - 读取无符号8位整数:Buffer.readUInt8(offset) - 写入无符号8位整数:Buffer.writeInt8(value[, offset[, unsigned]])

本文实例讲述了node.js中Buffer缓冲器的原理与使用方法。分享给大家供大家参考,具体如下:

一、什么是Buffer

Buffer缓冲器是用来存储输入和输出数据的一段内存。js语言没有二进制数据类型,在处理TCP和文件流的时候,就不是很方便了。

所以node.js提供了Buffer类来处理二进制数据,Buffer类是一个全局变量,Buffer在创建的时候大小就固定了,无法改变。

Buffer类的实例类似于由字节元素组成的数组,可以有效的表示二进制数据。

二、什么是字节

字节是计算机存储时的一种计量单位,一个字节等于8个位。一个位就代表0或1,每8个位(bit)组成一个字节(byte)。

字节是网络传输数据的基本单位,一个字节最大表示的十进制数是255。

三、什么是进制

进制是人为定义的带进位的计数方法,常见的有二进制,八进制,十六进制,和十进制。

将任意数字转换成不同进制

console.log(parseInt('12', 2)); console.log(parseInt('12', 8)); console.log(parseInt('12', 16)); console.log(parseInt('12', 10));

转换进制的另一种方法:

Node.js中Buffer缓冲器的工作原理及使用方法有哪些?

console.log((10).toString(2)); console.log((10).toString(8)); console.log((10).toString(16)); console.log((10).toString(10));

四、创建Buffer的方法

通过Buffer.alloc来创建指定长度Buffer

//创建6个字节的Buffer,用0填充数据 let buf1 = Buffer.alloc(6); console.log(buf1); //指定数字进行填充 let buf2 = Buffer.alloc(6, 2); console.log(buf2); //也可以指定字符进行填充,第三个参数表示字符编码,默认为utf8 let buf3 = Buffer.alloc(6, 'a', 'utf8'); console.log(buf3);

通过Buffer.allocUnsafe创建未初始化的Buffer,Buffer中的数据是未知的。

let buf = Buffer.allocUnsafe(6); console.log(buf);

通过字节数组创建一个Buffer

let buf = Buffer.from([1, 2, 3, 4, 5]); console.log(buf);

通过字符串创建一个Buffer,第二个参数表示字符编码,一个中文用3个字节表示。

let buf = Buffer.from('世界你好', 'utf8'); console.log(buf);

五、Buffer的一些常用方法

通过 fill() 以指定的数据填充Buffer

let buf = Buffer.alloc(12); console.log(buf); //参数一表示用来填充的值 //参数二表示开始的偏移量 //参数三表示结束的偏移量 //参数四表示字符编码 //偏移量的计算是左闭右开的区间,[start, end) buf.fill(1, 0, 2); console.log(buf); buf.fill(2, 2, 4); console.log(buf); buf.fill('A', 4, 6); console.log(buf);

通过 write() 向Buffer中写入数据

let buf = Buffer.alloc(12); console.log(buf); //参数一表示要写入的字符串 //参数二表示写入的偏移量 //参数三表示写入的字节数 //参数四表示字符编码 buf.write('世界', 0, 3); console.log(buf); console.log(buf.toString()); buf.write('世界', 3, 6); console.log(buf); console.log(buf.toString());

通过 writeInt8() 写入一个8位的整数,注意该整数是带符号的。

let buf = Buffer.alloc(12); console.log(buf); buf.writeInt8(1, 0); buf.writeInt8(2, 1); buf.writeInt8(3, 2); //注意,8位的整数,如果带符号,区间在 -128 到 127 之间 buf.writeInt8(127, 3); console.log(buf);

方法中还有一些writeInt16BE(),writeInt32BE(),writeInt16LE(),writeInt32LE()的方法。

因为不同的CPU架构,有不同的字节序,字节序是指数字在内存中保存的顺序。

以 BE 结尾的,表示 Big Endian ,将高位存储在起始位置。

以 LE 结尾的,表示 Little Endian,将低位存储在起始位置。

let buf = Buffer.alloc(6); //将高位存储在起始位置 buf.writeInt16BE('256', 0); // [01 00 00 00 00 00] console.log(buf); //读取要与写入的方法一致,不然数据会错乱。 console.log(buf.readInt16BE(0)); let buf2 = Buffer.alloc(6); //将低位存储在起始位置 buf2.writeInt16LE('256', 0); // [00 01 00 00 00 00] console.log(buf2); //读取要与写入的方法一致,不然数据会错乱。 console.log(buf.readInt16LE(0));

通过 toString() 方法,将Buffer解码成字符串。

let buf = Buffer.alloc(12); buf.write('世', 0, 3); buf.write('界', 3, 3); buf.write('你', 6, 3); buf.write('好', 9, 3); console.log(buf); console.log(buf.toString());

通过 slice() 创建一个新的Buffer切片,但是内存的指向与原Buffer仍然是同一块内存。

let buf = Buffer.alloc(12, 6); console.log(buf); //参数一表示开始切片偏移量 //参数二表示结束切片偏移量 let buf2 = buf.slice(0, 3); buf2.fill(9); console.log(buf);

通过 copy() 拷贝一个Buffer的数据到另一个Buffer

let t_buf = Buffer.alloc(12); let s_buf = Buffer.alloc(6); s_buf.write('世界', 0); console.log(s_buf.toString()); //参数一表示,拷贝进的Buffer //参数二表示,拷贝进Buffer的开始偏移量 //参数三表示,源Buffer的开始拷贝偏移量 //参数四表示,源Buffer的结束拷贝偏移量 s_buf.copy(t_buf, 0, 0, 6); console.log(t_buf.toString());

通过 Buffer.concat() 可以合并多个Buffer,返回一个新Buffer

let buf1 = Buffer.alloc(6); buf1.write('hello,'); let buf2 = Buffer.alloc(6); buf2.write('世界'); let buf3 = Buffer.concat([buf1, buf2]); console.log(buf3.toString()); //如果合并后的Buffer字节数大于设置的值,则会截断 let buf4 = Buffer.concat([buf1, buf2], 9); console.log(buf4.toString());

判断是否为一个Buffer

console.log(Buffer.isBuffer({'name': 'test'})); console.log(Buffer.isBuffer(Buffer.from('test')));

通过 Buffer.byteLength() 获取字符串字节长度

console.log(Buffer.byteLength('你好,世界'));

希望本文所述对大家node.js程序设计有所帮助。