Buffer 对象

发布时间:2019-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Buffer 对象脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Buffer对象
Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要require('buffer')。虽然javascript对于字符串的操作十分友好。但是,在node中,很多的操作都会处理大量的二进制数据,比如文件处理,网络协议处理,图片处理。javascript自有的字符串远远不能满足这些要求,于是Buffer对象应运而生。

模块

Buffer是一个典型的javascript和c++结合的模块,它将性能相关的部分用c++实现,而将非性能相关的部分用js实现。node在进程启动的时候就已经加载了Buffer,所以无需require。

内存分配

Buffer对象的内存分配不是在V8的堆内存中,而是在node的c++层面实现的内存的申请的。node采用了slab分配机制,动态内存管理,slab包含三种状态,slab具有如下三种状态:
full:完全分配状态
partial: 部分分配状态
empty:没有被分配状态 。
我们可以指定Buffer对象的大小

new Buffer(size)

node以8KB为界限区分Buffer是大对象还是小对象(Buffer.poolSize=8*1024),即8kb为slab单元大小,js以它为单元分配内存。

Buffer对象

Buffer对象类似于数组,它的元素为16进制的两位数,即0-255的数值。

Buffer 对象

上面的代码会,新建一个保存str字符串的buffer 对象。
使用指定的编码方式将字符串写入buffer,然后返回实际写入的大小。如果buffer 空间不足, 则只会写入部分字符串。在本例中使用'utf8'编码,这种方式不会写入个字符。

Buffer的转换

Buffer对象可以与字符串相互转换,目前支持的字符串编码类型有一下几种

  1. ASCII

  2. UTF-8

  3. UTF-16LE/UCS-2

  4. Base64

  5. Binary

  6. Hex

字符串转buffer,使用构造函数new Buffer(str,[encoding]),默认是UTF-8编码。
Buffer转字符串也很简单,Buffer对象的toString方法可以将Buffer转成字符串。

VAR buf = new Buffer('Buffer test')
buf.toString()

Buffer拼接

正确的拼接方式是用一个数组来存储接收到的所有Buffer片段,并记录所有片段的总长度,然后调用Buffer的concat()方法生成一个合并的Buffer对象。

var chunks = []
var size = 0
res.on('data', function(@H_765_126@chunk) {
    chunks.push(chunk)
    size += chunk.length
})
res.on('end', function() {
    var buf = Buffer.concat(chunks, size)
    var str = iconv.decode(buf, 'utf8')
    console.LOG(str)
})

脚本宝典总结

以上是脚本宝典为你收集整理的Buffer 对象全部内容,希望文章能够帮你解决Buffer 对象所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。