学习
实践
活动
工具
TVP
写文章
原创

理解Buffer

理解Buffer

Buffer 结构

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

Buffer受Array类型的影响很大,可以访问length属性得到长度,也可以通过下标访问元素

Node在内存的使用上应用的是在C++ 层面申请内存、在JavaScript中分配内存的策略

Node采用了slab动态内存管理分配机制

Buffer 的转换

字符串转Buffer

通过构造函数转换的Buffer对象,存储的只能是一种编码类型

一个Buffer对象可以存储不同编码类型的字符串转码的值

Buffer转字符串

Buffer对象的toString()可以将Buffer对象转换为字 符串

Buffer不支持的编码类型

只有少数的几种编码类型可以 在字符串和Buffer之间转换

Buffer提供了一个isEncoding()函数来判断编码是否支持转换

对于不支持的编码类型,可以借助Node生态圈中的模块完成转换

Buffer 的拼接

乱码是如何产生的

文件可读流在读取时会逐个读取Buffer

对于任意长度的Buffer而言,宽字节字符串都有 可能存在被截断的情况

setEncoding()与string_decoder()

让data事件中传递的不再是一个Buffer对象,而是编码后的字符串

可读流对象在内部设置了一个decoder对象,进行Buffer到字符串的解码,然后传递给调用者

正确拼接Buffer

正确的拼接方式是用一个数组来存储接收到的所有Buffer片段并记录下所有片段的总长度

然后调用 Buffer.concat() 方法生成一个合并的Buffer对象

Buffer 与性能

通过预先转换静态内容为Buffer对象,可以有效地减少CPU的重复使用,节省服务器资源

动态内容和静态内容分离,静态内容部分可以通 过预先转换为Buffer的方式,使性能得到提升

尽量只读取Buffer,然后直接传输,不做额外的转换,避免损耗

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • Nodejs·理解Buffer

    Node里面的Buffer其实就是用于网络请求、文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就....

    用户1154259
  • Node理论笔记:理解Buffer

    对于JavaScript,无论是宽字节字符串还是单字节字符串,都被认为是一个字符串。

    Ashen
  • 深入理解 Node.js 的 Buffer

    前言:Buffer 模块是 Node.js 非常重要的模块,很多模块都依赖它,本文介绍一下 Buffer 模块底层的原理,包括 Buffer 的核心实现和 V8...

    theanarkh
  • Openflow细节理解之—Buffer_id篇

    OpenFlow消息中buffer_Id是什么? Openflow中buffer_id分别在三类消息中定义,并且起到的作用均是不同的。 ✔ Packetin消息...

    SDNLAB
  • 《深入浅出Node.js》-理解Buffer

    Buffer 是一个像 Array 的对象,主要用来操作字节。Buffer 是一个典型的 JavaScript 与 C++ 结合的模块,它将性能相关的部分用 C...

    李振
  • Go- Buffer Channel- Select-基础理解

    这篇主要讲Select这个有用的关键字用来监听管道顺带讲下带缓冲的Channel 带缓冲的Channel Channel是可以带有缓冲的 c := make(c...

    李海彬
  • 深入理解 Node.js Buffer 的 encoding

    计算机最小的单位是一个位,也就是 0 和 1,在硬件上通过高低电平来对应。但是只有一位表示的信息太少了,所以又规定了 8 个位为一个字节,之后数字、字符串等各种...

    神说要有光zxg
  • Android buffer

    用户9732312
  • [AWR报告]Buffer Hit %

    从这期开始讲解awr报告的部分,上期说的是awr整体的部分,今天开始对里面的细节说起

    bsbforever
  • (转载)buffer和cache怎么让你们解释的那么难理解?

    对于一个即将踏上“系统运维”或者更加高大尚的工作“系统调优”,如果这不跟这两哥们搞好关系了,坑的不只有内存,更坑的是你拿着调优的钱却干着随时被调的活。因为作为一...

    欲休
  • Protocol Buffer

    Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 ...

    用户5325874
  • [AWR报告]Buffer Nowait

    从这期开始讲解awr报告的部分,上期说的是awr整体的部分,今天开始对里面的细节说起

    bsbforever
  • Circular buffer

    A circular buffer, cyclic buffer or ring buffer is a data structure that uses a ...

    全栈程序员站长
  • ClickHouse Buffer

    jasong
  • IBASE write buffer

    PARAMETERS: id TYPE ibap_head1-ibase OBLIGATORY DEFAULT '3314',             txt...

    Jerry Wang
  • 性能测试必备知识(11)- 怎么理解内存中的Buffer和Cache?

    https://www.cnblogs.com/poloyy/category/1806772.html

    小菠萝测试笔记
  • 多个buffer Pool实例 (3)—Buffer Pool(五十六)

    前面说了lru链表,为了防止mysql的预读和全表查询刷新pool的频率太高,所以把lru链表分为young区域和old区域,但是频繁的移动lru链表也影响性能...

    用户9919783
  • JAVA NIO Buffer

    基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿。

    WindWant

扫码关注腾讯云开发者

领取腾讯云代金券