程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • node.js

    • Node.js 初识
    • 包与 npm 包管理器
    • Buffer 缓冲器
      • 1. Buffer 是什么
      • 2. Buffer 特点
      • 3. Buffer 的操作
        • 3.1 Buffer 的创建
        • 3.2 获取 Buffer 的长度
        • 3.3 Buffer 的转换
    • fs 文件系统
    • MongoDB 非关系型数据库
  • node.js
  • node.js
scholar
2024-08-02
目录

Buffer 缓冲器

# Buffer 缓冲器

背景:

  • 浏览器没有储存图片文件等媒体文件的需求,JS 存的都是一些基本数据类型。
  • 服务器需要存储图片/视频/音频等媒体文件,因此有了 Buffer 缓冲器。

# 1. Buffer 是什么

Buffer 是一个和数组类似的对象,不同是 Buffer 是专门用来保存二进制数据的。

# 2. Buffer 特点

  • 它是一个【类似于数组】的对象,用于存储数据(存储的是二进制数据)。
  • Buffer 的效率很高,存储和读取很快,它是直接对计算机的内存进行操作。
  • Buffer 的大小一旦确定了,不可修改。
  • 每个元素占用内存的大小为1字节。
  • Buffer 是Node中的非常核心的模块,无需下载、无需引入,直接即可使用

# 3. Buffer 的操作

# 3.1 Buffer 的创建

// 创建一个指定size大小的Buffer
// 安全,里面全是0
var buf = Buffer.alloc(size);  

//不安全,可能包含旧数据,需要重写所有数据
var buf = Buffer.allocUnsafe(size);   
1
2
3
4
5
6
  1. 方式一:

    let buf = new Buffer(10)
    console.log(buf)
    
    1
    2

    new Buffer 方式创建一个 Buffer 的实例对象,性能特别差(需要在堆里开辟空间,然后清理空间-置零)

  2. 方式二

    let buf2 = Buffer.alloc(10)
    console.log(buf2)
    
    1
    2

    创建一个 Buffer 的实例对象,性能比 new Buffer()稍强一点,在堆中开辟一块空间(该块空间没有人用过)

  3. 方式三

    let buf3 = Buffer.allocUnsafe(10)
    console.log(buf3)
    
    1
    2

    创建一个Buffer的实例对象,性能最好的,在堆里开辟空间。

# 3.2 获取 Buffer 的长度

// 获取Buffer的长度
buf.length
1
2

# 3.3 Buffer 的转换

// 相当于Buffer.alloc(size);
var buf = Buffer.allocUnsafe(size);
buf.fill(0)   //将可能出现的敏感数据用0全部填充

// 将一个字符串转换为Buffer
var buf = Buffer.from(str);

// 将一个Buffer转换为字符串
var str = buf.toString();
1
2
3
4
5
6
7
8
9

注意:

  • 输出的 Buffer 为什么不是二进制?
    输出的是16进制,但是存储的是二进制吗,输出的时候会自动转16进制。
  • 输出的Buffer不为空?
    在堆里开辟空间,可能残留着别人用过的数据,所以 allocUnsafe
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
包与 npm 包管理器
fs 文件系统

← 包与 npm 包管理器 fs 文件系统→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式