前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >理解Buffer

理解Buffer

原创
作者头像
李才哥
修改2021-03-02 18:07:16
9140
修改2021-03-02 18:07:16
举报
文章被收录于专栏:李才哥李才哥

理解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 删除。

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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,然后直接传输,不做额外的转换,避免损耗
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档