原创

理解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,然后直接传输,不做额外的转换,避免损耗

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nodejs·理解Buffer

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

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

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

    Ashen
  • 深入理解 Node.js Buffer 的 encoding

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

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

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

    小菠萝测试笔记
  • 图解PostgreSQL-buffer管理(一)

    通过两种方式管理buffer的描述符。1)free list链表;2)环形缓冲区。

    yzsDBA
  • 图解PostgreSQL-local buffer管理

    1、数组LocalBufferDescriptors[]为本地缓冲块的描述符,buf_id从-2开始,都是负数。为和共享缓冲区有区别,通过是否为负值就可以判断是...

    yzsDBA
  • 图解PostgreSQL-buffer管理(二)

    1、Buffer由数组BufferDescriptor[]数组进行管理。该数组由函数InitBufferPool创建,大小为NBuffers个成员即Buffer...

    yzsDBA
  • 图解PostgreSQL-buffer管理(三)

    1、本地buffer的分配由函数LocalBufferAlloc来完成,用于临时表的读写。

    yzsDBA
  • Go- Buffer Channel- Select-基础理解

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

    李海彬
  • Buffer pool 详解

    提示:公众号展示代码会自动折行,建议横屏阅读 ---- 1 综述 buffer pool 是 innodb的数据缓存,保存了 data page、index...

    腾讯数据库技术
  • NIO 之 Buffer 图解

    java404
  • PostgreSQL Buffer管理机制

    1、Buffer由数组BufferDescriptor[]数组进行管理。该数组由函数InitBufferPool创建,大小为NBuffers个成员即Buffer...

    yzsDBA
  • change buffer,你了解么?

    最近在极客时间看丁奇大佬的《MySQL45讲》,真心觉得讲的不错,把其中获得的一些MySQL方向的经验整理整理分享给大家,有兴趣同学可以购买相关课程进行学习。

    AsiaYe
  • MYSQL change buffer 原理学习

    关于MYSQL 的change buffer 的说一说,为何,因为它可以加速你的写操作,意思就是 insert update delete 等操作,尤其是你的...

    AustinDatabases
  • JS中Buffer数据详解

    随着WebSocket、WebAudio、Ajax2等广泛应用,前端方面只要是处理大数据或者想提高数据处理性能,那一定是少不了 ArrayBuffer对象

    jinghong
  • Java NIO实现原理之Buffer

    nio是基于事件驱动模型的非阻塞io,这篇文章简要介绍了nio,本篇主要介绍Buffer的实现原理。

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

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

    欲休
  • linux Page cache和buffer cache正解

    Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有...

    233333
  • InnoDB Buffer Pool巧配置全解

    InnoDB 维护了一个缓存数据和索引信息到内存的存储区叫做 Buffer Pool,它会将最近访问的数据缓存到缓冲区。我们通过配置各个 Buffer Pool...

    wubx

扫码关注云+社区

领取腾讯云代金券