Buffer

导读:本篇文章讲解 Buffer,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、Buffer对象

(缓冲区对象)上传下载要用

1. 作用:是Node提供的处理二进制数据的对象。是node的内置对象,在使用时不需要安装可以直接使用,不需要require(‘buffer’)

2. 使用的原因:JavaScript处理字符串的功能非常强大,但在二进制数据处理方面能力很弱。因此node就内置了Buffer对象专门处理二进制数据。Buffer是构造函数,可以使用new创建Buffer的对象,浏览器的v8引擎会为Buffer的对象分配内存空间,类似于数组。

let buf = new Buffer(259)//259表示buf有258个单元,类似于数组,下标范围0-258
console.log(buf)
// for (let i = 0; i < buf.length; i++) {
//     console.log(buf[i])
// }
let end = buf.slice(240,256)
console.log(end)
buf[0]=125
console.log(buf)

强调:buf的每个单元存放的数据必须是0~255之间的整数值。即Buffer的每个单元就是一个字节              Byte:字节

          1024Byte ==> 1KB

          1024KB ==> 1MB

          1024MB ==> 1GB

          1024GB ==> 1TB

3. Buffer对象可以和字符串进行互换

二、Buffer构造函数

1. 给构造函数传递整数:表示分配多少个字节的存储空间

let bytes = new Buffer(5) //表示给bytes分配5个字节的存储空间

2、给构造函数传递数组:数组的成员必须是整数值

let bytes = new Buffer([0x48,0x65,0x6c,0x6c,0x6f])//将数组传递给Buffer
console.log(bytes.toString())

3. 给构造函数传递字符串:默认的编码格式是utf8

let b1 = new Buffer("白桦林",'utf8')//默认utf8,utf8识别中文,acsii不识别中文
console.log(b1)//<Buffer e7 99 bd e6 a1 a6 e6 9e 97>
console.log(b1.toString())//白桦林

三、Buffer常用的函数

可以用类名(Buffer)直接访问的方法,就是静态成员

1. Buffer.isEncoding(字符集):参数’字符集’就是字符的编码格式(ASCII、utf8、base64)。作用是判断Buffer的字符集是否是给定的字符集,如果是函数返回true,不是函数返回false

console.log(Buffer.isEncoding('ascii'));//true
console.log(Buffer.isEncoding('gb2312'));//false

2. Buffer.isBuffer( buffer ):参数是一个Buffer的对象,判断参数是否是一个Buffer的实例

let b2 = Buffer.from("白桦林啊",'utf8')
console.log(Buffer.isBuffer(b2));//true
let date = new Date()
console.log(Buffer.isBuffer(date));//false

3. Buffer.byteLength( buffer ):返回字符串实际占有字节长度

let b2 = Buffer.from("白桦林啊",'utf8')//一个汉字占3个字符
console.log(Buffer.byteLength(b2))//<Buffer e7 99 bd e6 a1 a6 e6 9e 97>

四、实例属性

  length:表示Buffer对象的长度(单元个数)

let b3 = Buffer.from('茶卡盐湖','utf8') //字符串作为参数
console.log(b3)//<Buffer e8 8c b6 e5 8d a1 e7 9b 90 e6 b9 96>
console.log(b3.length)//12

五、实例方法

用对象名调用的方法

1. 类的成员:

​ (1)实例成员:

​ (2)类成员:静态成员。是通过类名直接访问,不属于某个具体的对象,而为类的所有对象共享的

class Student{
    constructor(id,name){
        Student.school = '木叶忍者学校'  //school是类成员(静态成员)
        this.id = id
        this.name = name
    }
    Student.setSchool = function(){  //类方法
    }
    show(){  //实例方法
    }
}
let s1 = new Student(1,'A') //s1有自己的id和name
let s2 = new Student(2,'B')

2. Buffer的实例方法

write(value,index):向Buffer对象中写入数据

​ 参数value:表示写入的值

​ 参数index:表示写入的位置。可以省略

let bytes = Buffer.alloc(9)
bytes.write('中')
bytes.write('国',6)
bytes.write('人',3)
console.log(bytes.toString())//中人国

使用Buffer时注意的问题:在创建Buffer对象时,node建议使用以下两个方法,而不建议使用new

​ (1)Buffer.alloc(number,fill,encoding),返回一个Buffer对象

​ 参数number:必须是整数,代表buffer的单元个数

​ 参数fill:表示填充数据。默认值为0

​ 参数encoding:若填充数据是字符串,用来指定字符集(编码格式),默认值是utf8

let bytes = Buffer.alloc(5,'A')//5个单元
console.log(bytes)//<Buffer 41 41 41 41 41>

​ (2)Buffer.from(args1,args2),返回一个Buffer对象

​ 参数args1:可以是字符串,也可以是数组

​ 参数args2:若第一个参数是字符串,则用来指定字符集。

let b2 = Buffer.from([0x41,0x42,0x71])  //数组作为参数
console.log(b2.toString())//ABq
let b3 = Buffer.from('茶卡盐湖','utf8') //字符串作为参数
console.log(b2.toString())//茶卡盐湖

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79767.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!