Node入门
在Nodejs中我们不可以使用BOM和DOM,只能使用Nodejs为我们提供的API,在Nodejs中global称作顶级对象,在ES2020中我们还可以通过globalThis去访问.
Buffer模块
Buffer中文译为(缓冲区),是一个类似于Array的对象,用于表示固定长度的字节序列.简单来说Buffer就是一段固定长度的内存空间,用于处理二进制数据.
Buffer特点
- Buffer大小固定且无法调整
- Buffer性能较好,可以直接对计算机内存进行操作
- 每个元素的大小为1字节(buyte)
创建Buffer
我们可以通过三种方式去进行Buffer的创建.
- 第一种使用Buffer里面的alloc方法去进行创建,需要注意的是通过alloc创建的Buffer会清空内存数据,重新初始化为0
- 第二种我们使用allocUnsafe创建的Buffer不会出现清空驻留在内存中的旧数据
- 第三种我们可以使用form()方法,里面写入的是需要被转换的内容,当然数组也可以转换存为Buffer只需要在传入的时候加上[]即可
// alloc
const buf = Buffer.alloc(10)
// 使用alloc创建出来的Buffer会清空内存中的旧数据,把他们初始为0
console.log(buf)
// allocUnsafe
const buf_1 = Buffer.allocUnsafe(100)
// 使用allocUnsafe创建出来的Buffer会出现内存复用的问题,不会清空内存中的旧数据
console.log(buf_1)
// from
const buf_3 = Buffer.from('Hello')
// from可以把字符串转换为二进制的数据进行存储,还可以把数组也转换为Buffer
const arr = Buffer.from([105,108,111,118,101,121,111,117])
// 在转换的时候会转换为ASSCII码表中对应的字符,得到的是十六进制的数据
console.log(buf_3)
console.log(arr)
操作Buffer
当我们尝试去读取一个Buffer里面的内容的时候需要使用toStirng()去转换为字符串,当然你如果希望转换为二进制的话可以在里面写入2,可以得到转换为对应的二进制数据.
当我们的Buffer是一个数组的时候,如果我们需要使用的是数组里面的第一个元素,我们可以通过Buffer_name[index]的方式去访问该Buffer里面数组下标对应的数据内容.
Buffer也存在溢出的情况,因为Bouffer是转换为二进制存储到变量中的,在存储的时候Buffer会舍弃高位.拿361举例子,361表示的二进制是0001 0110 1001,在通过Buffer舍弃高位后得到的结果为0100 1001 也就是说他会舍弃最高位的内容,保存两个字节信息.
我们直接输出Buffer里面存储的信息的时候,他是默认以十六进制输出的,这点需要留意.如果我们像Buffer里面去存入一个中文的时候默认占用的是三个字节.
const arr = Buffer.from([105,108,111,118,101,121,111,117])
// 读取arr这个变量里面存储的Buffer中的数组,让他按照utf-8的形式进行编码输出
console.log(arr.toString())
// 读取arr里面下标为0的元素,用二进制的形式转换输出
// 我们可以通过[]进行对Buffer的读取和写入
console.log(arr[0].toString(2)) // 1101001
// 输出原来arr变量里面的Buffer
console.log(arr)
arr[0] = 95
console.log(arr)
// 溢出
let arr = Buffer.from([105,108,111,118,101,121,111,117])
/*
因为转换出来时二进制的数据,所以在node里面他会舍弃高位
0001 0110 1001 ==> 表示的是361的二进制
在node里面舍弃高位后得到的结果就是 0110 1001
*/
arr[0] = 361
console.log(arr) // 直接输出是以十六进制进行输出的
console.log(arr[0]) // 取Buffer里面的第0个输出的是十进制
console.log(arr[0].toString(2)) // 以二进制进行输出
// 中文
let arr = Buffer.from('苏颜')
// 在utf-8编码的时候一个中文默认占的是三个字节
console.log(arr)