Node.js二进制与Buffer的介绍与使用
什么是二进制
计算机中的数字,都是以二进制的方式来存储和处理的。二进制是由“0”和“1”两个数字组成,其中每一位代表2的不同次方。例如,一个8位二进制数“10101010”所代表的十进制数就是:(1x2^7) + (0x2^6) + (1x2^5) + (0x2^4) + (1x2^3) + (0x2^2) + (1x2^1) + (0x2^0) = 170。
什么是Buffer
在Node.js中,Buffer是一种更好的处理二进制数据的方式。Buffer是一个存储二进制数据的类数组对象,它的元素是16进制的两位数,即0-255的整数。
Buffer可以存储任何数据类型,包括ASCII,UTF-8,甚至是图片、音频和视频等二进制数据。Buffer的大小一旦被分配,就不能被修改,但可以通过复制到一个不同大小的Buffer实例来实现。
如何创建Buffer
在Node.js中,可以通过多种方式来创建Buffer。
通过Buffer.from创建Buffer
// 创建一个长度为10的Buffer对象,并将其填充为数字1
const buf = Buffer.from([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
console.log(buf); // 输出:<Buffer 01 01 01 01 01 01 01 01 01 01>
通过Buffer.alloc创建Buffer
// 创建一个长度为10的Buffer对象,并将其填充为0
const buf = Buffer.alloc(10);
console.log(buf); // 输出:<Buffer 00 00 00 00 00 00 00 00 00 00>
通过Buffer.allocUnsafe创建Buffer
// 创建一个长度为10的Buffer对象,并使用随机值进行填充
const buf = Buffer.allocUnsafe(10);
console.log(buf); // 输出:<Buffer 3a 0f 11 c2 21 03 d0 03 88 2a>
如何访问Buffer中的数据
在Buffer中有许多方法可以访问数据,比如:读取、写入、拷贝和填充等。下面是一些常用的方法。
读取Buffer内容
const buf = Buffer.from('hello world');
// 读取特定位置的字节
console.log(buf[0]); // 输出:104
// 读取特定位置到指定长度的字节
console.log(buf.slice(0, 5)); // 输出:<Buffer 68 65 6c 6c 6f>
// 读取字符串
console.log(buf.toString()); // 输出:hello world
写入Buffer内容
const buf = Buffer.alloc(10);
// 写入一个字节
buf[0] = 72;
// 写入一个字符串
buf.write('world');
console.log(buf); // 输出:<Buffer 48 6f 72 6c 64 00 00 00 00 00>
示例说明
示例一:读取文件内容
const fs = require('fs');
const path = require('path');
// 读取文件内容
const file = fs.readFileSync(path.join(__dirname, 'test.txt'));
console.log(file); // 输出:<Buffer 54 68 69 73 20 69 73 20 61 20 74 65 73 74 20 66 69 6c 65>
示例二:网络请求返回Buffer
const http = require('http');
http.get('http://www.baidu.com', function(res) {
const chunks = [];
res.on('data', function(chunk) {
chunks.push(chunk);
});
res.on('end', function() {
const buffer = Buffer.concat(chunks);
console.log(buffer.toString());
});
});
总结
在Node.js中,二进制数据的处理十分常见。Buffer提供了一种更好的处理方式,它可以存储任何类型的数据,并且可以进行多种操作,比如读取、写入、拷贝和填充等。通过了解如何创建和操作Buffer对象,可以更好地处理二进制数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs二进制与Buffer的介绍与使用 - Python技术站