内容简介: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()就会导致乱码。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- [译] 深入 JS 对象属性
- 深入XPC:逆向分析XPC对象
- 深入理解Objective-C中实例、类对象、元类对象之间的关系
- 深入理解Python面向对象的三大特性
- <<深入PHP面向对象、模式与实践>>读书笔记:面向对象设计和过程式编程
- python面向对象-2深入类的属性
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Ruby中文版
托马斯 / 孙勇、姚延栋、张海峰 / 电子工业出版社 / 2007-3 / 99.00元
《Programming Rudy》(中文版)(第2版)是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考手册。Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简......一起来看看 《Programming Ruby中文版》 这本书的介绍吧!
XML 在线格式化
在线 XML 格式化压缩工具
RGB CMYK 转换工具
RGB CMYK 互转工具