node-buffer
Node.js – Buffer
在浏览器中,JavaScript直接处理字符串即可满足绝大多数的业务需求,而Node并不同于浏览器的应用场景,它需要处理网络流和文件I/O流,操作字符串远远不能满足传输的性能需求,于是Buffer对象应用而生。
Buffer结构
Buffer是一个像Array的对象,但它主要用于操作字节。Buffer是一个典型的JavaScript与C++结合的模块,它将性能相关部分由C++实现,将非性能部分由JavaScript实现。
Buffer类是一个全局变量,用于直接处理二进制数据。Buffer对象类似于数组,它的元素为16进制的两位数。
1 | const buffer = Buffer.from('Welcome to 中国', 'utf-8'); |
给元素的赋值小于0时,就将该值逐次加256,直到得到一个0-255的整数。如果得到的数大于255,就逐次减去256,直到得到一个0-255的整数。如果是小数,舍弃小数部分,只保留整数部分。
1 | let buf = Buffer.alloc(5); |
Bufer内存分配
Buffer对象的内存分配不是在V8的堆内存中,而是在Node的C++层面实现内存的申请的,在JavaScript中分配内存。
Node采用了slab动态内存管理机制,slab就是一块申请好的固定大小的内存区域。具有 full(完全分配)、partial(部分分配)、empty(没有被分配)3种状态。