node-buffer笔记

Buffer是什么

Javascript十分善于操作字符串,但是它并不善于操作二进制数据,在Javascript语言中也没有任何二进制相关的数据结构。
但是当Javascript扩展到后端领域以后,数据库操作、图像操作、文件上传这类后端很常见的操作,都无法再依赖字符这种类型来进行操作了,所以Node实现了一个叫做Buffer的 二进制缓冲区。它的单位是 字节,可以 随机设置和获取缓冲区的数据

Buffer怎么用

创建一个缓冲区

根据一个字符串创建一个Buffer缓冲区很容易

语法: new Buffer(string[, encoding])
但是node最近也在快速发展中,这个API在v6中遭到了废弃,所以在v6之后的版本中,使用以下语法
Buffer.from(string[, encoding])

这里encoding默认值为utf-8,其他的可选值还有asciii、base64等。

1
Buffer.from("que01.top");

创建一个指定空间的Buffer

语法: new Buffer(size)
同样的,这个语法在v6之后废弃了,新的API:
语法: Buffer.alloc(size[, fill[, encoding]])

size:关于size的大小有以下规定

  • size必须小于等于buffer.kMaxLength,在32位系统下它为(2^30)-1,64位系统下它为(2^31)-1
  • 当size<=0,将会创建一个size=0的buffer

fill:预先填充的值,默认为0
encoding:编码

Buffer的其他方法

toString

我们可以将buffer还原为一个字符串

1
2
3
4
> var buf = Buffer.from("my webSite:que01.top")
undefined
> buf.toString()
'my webSite:que01.top'

toJSON

1
2
3
4
> var buf2 = Buffer.from([1,2,3,4])
undefined
> buf2.toJSON()
{ type: 'Buffer', data: [ 1, 2, 3, 4 ] }

indexOf && lastIndexOf

1
2
3
4
5
6
7
8
> var buf = Buffer.from("my webSite:que01.top")
undefined
> buf.indexOf("que01")
11
> var buf2 = Buffer.from([1,2,3,4])
undefined
> buf2.indexOf(2)
1

concat

语法: Buffer.concat(list[, totalLength])

1
2
3
4
> let a = Buffer.from("我是:"),
b = Buffer.from("张三");
console.log(Buffer.concat([a,b],a.length+b.length).toSring())
我是:张三

暂结

暂时就这样吧。Buffer目前来说因为个人还是偏向Web开发,暂时也没有太多应用。更多的时间有机会我再来补充。