深入浅出node.js学习笔记-Buffer对象

栏目: C++ · 发布时间: 6年前

内容简介:Buffer在node运行时自动加载,挂载到global对象上,所以使用不需要requireBuffer是一个类似Array的对象,但它主要操作字节。Buffer所占内存不通过V8分配,属于

Buffer在node运行时自动加载,挂载到global对象上,所以使用不需要require

Buffer是一个类似Array的对象,但它主要操作字节。

Buffer所占内存不通过V8分配,属于 堆外内存

Buffer类似于数组格式,内部元素是16进制的两位数,即0~255

Utf-8情况下,汉字占3位,符号和字母占一位

可通过下角标访问元素和赋值。

let buffer = new Buffer(100)
buffer[10] = -100 // 156 如果赋值比0小,则加上256
buffer[20] = 300 // 44 如果赋值比255大,则减去256
buffer[30] = 3.1415 // 3 小数则舍弃小数部分,保留整数
console.log(buffer[1]) //会打印一个0到255的随机值

Buffer内存分配不通过v8,是因为Buffer的性能相关部分是通过C++实现的,所以它的内存是通过c++层面实现的。

Buffer内存分配时,以 8kb 为界限

  • 小于8kb的为小Buffer:对于小Buffer对象,采用slab分配机制,c++先申请8kb的slab内存,如果该slab剩余空间足够,则在slab空间内分配内存给新的Buffer,如果不足,则申请新的slab空间。
  • 大于8kb的为大Buffer:大Buffer对象,将会直接分配一个SlowBuffer对象作为slab空间,该slab空间被大Buffer对象独占。

Buffer可以与字符串直接进行转换,支持以下格式

  • UTF-8
  • ACSII
  • UTF-16LE/UCS-2
  • Base64
  • Hex
  • Binary

Buffer对象尽量不要使用+运算符进行拼接,如下代码

const fs = require(‘fs’)
let rs = fs.createReadStream(’test.txt’)
let data = ‘'
rs.on(‘data’, function(chunk) {
    data += chunk
})
rs.on(‘end’, function() {
    console.log(data)
})

data += chunk这句话蕴含了toString()转换,等价于data = data.toString() + chunk.toString()

chunk为Buffer对象,如何内部含义宽字节编码,toString()就会导致乱码。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Geometric Folding Algorithms

Geometric Folding Algorithms

Erik D Demaine / Cambridge University Press / 2008-8-21 / GBP 35.99

Did you know that any straight-line drawing on paper can be folded so that the complete drawing can be cut out with one straight scissors cut? That there is a planar linkage that can trace out any alg......一起来看看 《Geometric Folding Algorithms》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具