Node.js缓冲区基本操作
创建缓冲区
先来看代码:
1 | var buffer = new Buffer('Hello, Node.js!'); |
上面代码展示了利用 new Buffer(),来创建缓冲区。当需要指定内容初始化缓冲区,有两个参数可选,第一个为需要初始化的内容,第二个为指定编码格式。当不需要初始化内容时,可以通过指定容量大小来创建缓冲区。
可以接受的编码格式为:
1 ascii : ASCII。该编码格式仅适用于ASCII字符集。
2 utf8 : UTF-8。utf8是默认编码格式。
3 base64 : Base64。 这种编码格式基于64个可打印ASCII字符来表示二进制数据,Base64通常用于在字符文档内嵌入可以转换成字符串的二进制数据,在需要时又可以完整无损地转换回原来的二进制格式。
在缓冲区设置和获取数据
当创建或者获取缓冲区后,可以使用[]操作符来查看或者修改缓冲区中的某个字节。
1 | var buff = new Buffer('Hello, Node.js'); |
当创建一个已被初始化的缓冲区,缓冲区的数据并非是0,而是一些随机值。
修改任意位置上的数据:
1 | buff[4] = 123; |
- 如果将缓冲区某个位置设置为一个大于255的数,将会用256对该数取模,最终将模取模结果赋给该位置。
- 如果将缓冲区某位置设置为256,则实际赋值为0.
- 如果将缓冲区某位置设置为类似100.9这样的小数,则仅会存储整数部分。
- 如果尝试给超出缓冲区边界的位置赋值,则赋值失败,缓冲区无变化。
缓冲区长度,可以用.length属性获得。
切分缓冲区
1 | var buffer = new Buffer('test test test new buffer'); |
切分缓冲区,并没有分配新的内存,也没进行任何复制,新缓冲区还是使用父缓冲区的内存区域。只是引用了父缓冲区不同的起始位置、结束位置。利用这种方法从父缓冲区创建一个较小的子缓冲区,父缓冲区在操作结束后会被保留,并不会被垃圾收集器回收,如果不谨慎处理,很容易造成内存泄漏。
如果担心因父缓冲区保留而产生内存泄漏问题,可以使用copy方法替代slice方法。
复制缓冲区
1 | var buffer = new Buffer('12345678901234567890'); |
上面代码将源缓冲区的第8-12位置上的数据复制到目标缓冲区的起始位置。
缓冲区解码
1 | var str = buf.toString(); |
可以指定编码格式:
1 | var base64str = buf.toString('base64'); |