开发者学堂课程【Node.js 入门与实战:Buffer 类型介绍】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8309
Buffer 类型介绍
目录:
一、Buffer 对象介绍
二、Buffer 对象原因
三、Buffer 对象图片讲解
四、Buffer 对象类型介绍
五、Buffer 对象创建流程
六、Buffer 对象属性
一、Buffer 对象
1.介绍
buffer对象可以理解为一个字节数组对象,buffer对象可以看成一个二进制对象,(保存一堆二进制数组的对象),主要用于数据传输,buffer的核心意义就是为了数据传输。
Buffer对象是Node处理二进制数据的一个接口
2. 为什么使用Buffer对象
做数据传输使用Buffer对象,把数据一次拿出一点,buffer每次取出一点,目的就是为了数据传输
3.Buffer图片讲解
文件流
二、Buffer 类型介绍
1. JavaScript 语言没有读取或操作二进制数据流的机制。
2. Node.js 中引入了 Buffer 类型使我们可以操作 TCP 流或文件流。
3. Buffer 类型的对象类似于整数数组,但 Buffer 的大小是固定的、且在V8堆外分配物理内存。Buffer 的大小在被创建时确定,且无法调整。( buf.length是固定的,不允许修改)
4. Buffer 是全局的,所以使用的时候无需 require()的方式来加载
三、如何创建 Buffer 对象
常见的 API 介绍
1. 创建一个 Buffer 对象
Buffer 在官方类型当中是没有默认储存二进制流的。
Buffer 的长度是固定的,不允许修改,如修改只能重新创建一个新的。
Buffer 是全局的,所有使用的时候无需 require()的方式来加载。
//通过一个字节数组来创建一个buffer对象
Var array =(0x68,0x65,0x6c,0x6c,0x6f);
Var buf -buffer,from(array);
//buffer转换为字符串
Console.log(buf.tostring(‘utf8’);
//通过一个字符串来创建一个buffer对象
//buffer.from(string[,encoding])
Var buf =buffer.from(‘你好世界!Hello Word!~’);
Console.log(buf);
Console.log(buf.tostring());
//判断一个对象是否是buffer类型对象
//buffer.isbuffer(obj)
//obj
//Returns:
//Returns ture if obj is a buffer,false otherwise.
获取buffer中的某个字节
//根据索引获取buffer中的某个字节(byte、octet)
//buf(index)
//buffer对象与编码
Node.js目前支持的编码如下,
Ascii
Utf8
Utf16le
ucs2是utf16le的别名
base64
Latin1
Binary
是latin1的别名
Hex
用两位16进制来表示每个字节
2. 拼接多个Buffer对象为一个对象
//Buffer.concat(list[, totallength])var bufferList - [];
var buf - Buffer.concat(bufferList);
3. 获取字符串对应字节个数
//Buffer.byteLength(string[, encoding])
var len = Buffer .byteLength("你好世界Hello' , "utf8 ' );console.log(len);
4.判断一个对象是否是Buffer类型对象
// Buffer.isBuffer(obj)
// obj
//Returns:
// Returns true if obj is a Buffer, false otherwise.
5.获取Buffer中的某个字节
//根据索引获取Buffer中的某个字节( byte、 octet)l/ buf[index]
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
6、获取Buffer对象中的字节的个数
//buf.length
//注意: length属性不可修改
一个utf8数字占1个字节
一个utf8英文字母占1个字节
7.已过时的 API
//以下 API已全部过时
new Buffer(array )new Buffer( buffer)
new Buffer( arrayBuffer[ , byteoffset [,length]])new Buffer(size)
new Buffer( string[, encoding])
四、Buffer 属性
Buffer 的属性
容量(capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变
上界(limit):缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数
位置(position):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新
标记(mark):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新一个备忘位置。调用 mark( )来设定 mark = postion。调用 reset( )设定 position =mark。标记在设定前是未定义的(undefined)。
这四个属性之间总是遵循以下关系:0 <= mark <= position <= limit <= capacity