Node中需要处理网络协议、操作数据库、处理图片、接收上传文件等,在网络流和文件的操作中,还要处理大量二进制数据,js自有的字符串远远不能满足这些需求,于是buffer对象应运而生。
由于Buffer太过常见,Node在进程启动时就已经加载了它,并将其放在全局对象上,所以在使用Buffer时,无须require()即可直接使用。
Buffer内存分配
Buffer占用的内存不是通过V8分配的,属于堆外内存,是在Node的C++层面实现内存的申请的、在javascript中分配内存。
为了高效使用申请来的内存,Node采用slab分配机制,slab有3种状态:
full 完全分配状态
partial 部分分配状态
empty 没有被分配状态
Buffer的转换
Buffer的拼接
Buffer与性能
在应用中,我们通常会操作字符串,但一旦在网络中传输,都需要转换为Buffer,已进行二进制数据传输。
文件读取