Node.js Buffer(缓冲区)
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。描述++++++++++++++++++++++++++++++++++++++++++++++++++++
创建 Buffer 类
Buffer 提供了以下 API 来创建 Buffer 类:
Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
Buffer.allocUnsafeSlow(size)
Buffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
Buffer.from(buffer): 复制传入的 Buffer 实例的数据,并返回一个新的 Buffer 实例
Buffer.from(string[, encoding]): 返回一个被 string 的值初始化的新的 Buffer 实例
例子----------------------------------------------------
// 创建一个长度为 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);// 创建一个长度为 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);// 创建一个长度为 10、且未初始化的 Buffer。
// 这个方法比调用 Buffer.alloc() 更快,
// 但返回的 Buffer 实例可能包含旧数据,
// 因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');console.log(buf1);
console.log(buf2);
console.log(buf3);
console.log(buf4);
console.log(buf5);
console.log(buf6);结果....................................................<Buffer 00 00 00 00 00 00 00 00 00 00>
<Buffer 01 01 01 01 01 01 01 01 01 01>
<Buffer 00 00 00 00 00 00 00 00 e9 80>
<Buffer 01 02 03>
<Buffer 74 c3 a9 73 74>
<Buffer 74 e9 73 74>描述++++++++++++++++++++++++++++++++++++++++++++++++++++
写入缓冲区
语法写入 Node 缓冲区的语法如下所示:buf.write(string[, offset[, length]][, encoding])
参数
参数描述如下:string - 写入缓冲区的字符串。offset - 缓冲区开始写入的索引值,默认为 0 。length - 写入的字节数,默认为 buffer.lengthencoding - 使用的编码。默认为 'utf8' 。根据 encoding 的字符编码写入 string 到 buf 中的 offset 位置。 length 参数是写入的字节数。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。 只部分解码的字符不会被写入。返回值返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。例子----------------------------------------------------buf = Buffer.alloc(256);len = buf.write("www.runoob.com");console.log("写入字节数 : "+  len);
结果....................................................
写入字节数 : 8描述++++++++++++++++++++++++++++++++++++++++++++++++++++
从缓冲区读取数据
语法
读取 Node 缓冲区数据的语法如下所示:
buf.toString([encoding[, start[, end]]])
参数
参数描述如下:
encoding - 使用的编码。默认为 'utf8' 。
start - 指定开始读取的索引位置,默认为 0。
end - 结束位置,默认为缓冲区的末尾。
返回值
解码缓冲区数据并使用指定的编码返回字符串。例子----------------------------------------------------
const buf = Buffer.alloc(26);
for (let index = 0 ;index < 26 ;index ++){buf[index] = index + 97;
}console.log( buf.toString('ascii'));       // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5));   // 输出: abcde
console.log( buf.toString('utf8',0,5));    // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde结果....................................................
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde描述++++++++++++++++++++++++++++++++++++++++++++++++++++
将 Buffer 转换为 JSON 对象
语法
将 Node Buffer 转换为 JSON 对象的函数语法格式如下:
buf.toJSON()
当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()。
返回值
返回 JSON 对象。例子----------------------------------------------------
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
console.log(son);
const copy = JSON.parse(json, (key, value) => {return value && value.type === 'Buffer' ?Buffer.from(value.data) :value;
});
console.log(copy);结果....................................................
{"type":"Buffer","data":[1,2,3,4,5]}
<Buffer 01 02 03 04 05>其他的一些简单整理
缓冲区合并 Buffer.concat(list[, totalLength])
缓冲区比较 buf.compare(otherBuffer);
拷贝缓冲区 buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
缓冲区裁剪 buf.slice([start[, end]])
缓冲区长度 buf.length;

nodejs-Buffer(缓冲区)相关推荐

  1. NodeJS Buffer(缓冲区)

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因 ...

  2. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  3. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  4. Node.js Buffer(缓冲区)

    一.Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了 ...

  5. 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)

    1.世界 Java NIO之Buffer(缓冲区) Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从 ...

  6. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  7. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  8. Buffer缓冲区的相关操作

    目录 一.什么是Buffer? 二.buffer的创建 1.alloc 2.allocUnsafe 3.from 三.Buffer的操作 1.Buffer与字符串的转换 2.Buffer的读写 四.B ...

  9. 【基础巩固篇】Java中的Buffer缓冲区探究

    作者:不清不慎,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 一.什么是缓冲区,与缓存的区别? 首先简单的说下什么是缓存,缓冲的目的的是用来缓解应用程序上下层之间的性能差异,从 ...

  10. 【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )

    文章目录 I . 缓冲区 ( Buffer ) 存取类型 II . 只读缓冲区 ( ReadOnlyBuffer ) III . 映射字节缓冲区 ( MappedByteBuffer ) I . 缓冲 ...

最新文章

  1. java如何把查到的对象集合放入 展示对象list中_Java面试整理-基础篇8.集合1
  2. 测试硬盘读写速度软件_Linux 测试 IO 性能(磁盘读写速度)
  3. mysql set语句_MySQL Prepared语句简介
  4. 疑似iPhone 13 mini原型机曝光:后置相机模组排布方式变化
  5. 简单的俄罗斯方块代码(Java)
  6. 每天学一点flash(76)百度MP3音乐APi接口使用
  7. Cplex安装教程与使用介绍
  8. fanuc机器人控制柜接线_工业机器人控制柜及使用方法
  9. 抽象代数基本概念(一):代数系
  10. 拼多多商品详情|多多进宝商品详情|拼多多商品详情接口
  11. 北京企业平均薪酬达16.68万元;小米 11 内核已开源;阿里达摩院 2021 十大科技趋势 | EA周报...
  12. 安装Kubuntu至U盘
  13. c++图的创建_如何在photoshop中创建汉堡菜单模板
  14. 金阊oracle服务器,配置 KDC 服务器
  15. python文本保存
  16. php抓取天眼查,python用xpath采集天眼查内容,有反爬,zip拼数据
  17. 汤森路透 Thomson Reuters --使用多模型数据库ArangoDB 打造快速安全的简洁视图分析...
  18. 《资本论》读书笔记(2)第二卷第一章:资本形态变化及其循环
  19. STM32 CUBEMX 修改单片机型号 个人操作记录
  20. [如何写一篇优秀的论文] 书写初稿

热门文章

  1. Java 11 快要来了,编译 运行一个命令搞定!
  2. Windows 曝漏洞 —— 影响所有版本
  3. Hiberante+jpa,注解生成32字符的Id
  4. ffmpeg流文件合并concat
  5. asp.net服务器控件button先执行js再执行后台的方法
  6. [网站上线]Lamp环境及其后续配置
  7. Python3 中 爬网页 \uxxx 问题
  8. 多线程之synchronized
  9. QT删除QWidget或QLayout下的控件
  10. 重拾简单的linux指令之info 【转】