首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >理解Buffer

理解Buffer

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

理解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,然后直接传输,不做额外的转换,避免损耗
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档