Buffer缓存对象

纯粹的Javascript 对Unicode 很友好,但是操作二进制数据就不怎么在行了。处理TCP 数据流或者文件时,必 须要操作二进制数据流。node 提供了一些方法来创建、操作和接收二进制数据流。

原始的数据保存在Buffer 类的实例中。Buffer 类似于一个整数数组,不同之处在于它和在V8内存堆之外分配的 一段内存数据相对应。Buffer 对象的大小不能调整。你可以通过”require(‘buffer’).Buffer”来使用这个类。

Buffer 对象是全局对象。

Buffer 和Javascirpt 中string 对象之间的转换需要指定编码方式。如下是node 支持的各种编码方式:

  • ‘ascii’ - 应用于7位的ASCII 数据。这种编码方式速度很快,它会删除字节的高位。
  • ‘utf8’ - Unicode字符。许多网页和其他文档使用UTF-8。
  • ‘binary’ - 一种只使用每个字符前8个字节将原始的二进制数据编码进字符串的方式。
    这个方式已经废弃,应当尽量使用buffer 对象。这个编码将会在未来的node 中删除。
  • ‘utf16le’ - 2或4字节,little - endian编码Unicode字符。代理对(U + 10000 U + 10 ffff)支持。
  • ‘ucs2’ - Alias of ‘utf16le’.
  • ‘base64’ - Base64编码的字符串。当创建一个缓冲的字符串,这种编码也会正确地接受“URL和文件名安全字母表”。
  • ‘hex’ -每个字节编码两个十六进制字符。

    Buffer 对象是全局对象,在node命令行中输入Bufer可以查看对象内容,如下图所示:

    poolSize: 内存载体的容量;
    isBuffer: 判断对象是否为Buffer类型对象;
    compare: 判断两个Buffer对象的相对位置;
    isEncoding: 判断nodejs是否支持某种编码;
    concat: 将几个Buffer对象连接创建为一个新的Buffer对象;
    byteLength: 获得指定编码下获得字符串所占的字节数。

Buferr实例化:

new Buffer(size)

创建指定大小的buffer 对象。

new Buffer(array)

从数组新建buffer 对象。

new Buffer(str, encoding=’utf8’)

新建一个保存指定字符串的buffer 对象。

buffer.write(string, offset=0, encoding=’utf8’)

使用指定的编码方式将字符串从指定偏移开始写入buffer,然后返回实际写入的大小。如果buffer 空间不足, 则只会写入部分字符串。在本例中使用’utf8’编码,这种方式不会写入半个字符。
示例:将一个utf8字符串写入buffer,然后打印出来

buf = new Buffer(256);
len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(len + " bytes: " + buf.toString('utf8', 0, len));
// 12 bytes: ½ + ¼ = ¾```

buffer.toString(encoding, start=0, end=buffer.length)

解码buffer 数据并使用指定的编码返回字符串,转换从start 参数指定的位置开始,到end 结束。
参看上面buffer.write()的例子。

buffer[index]

获取或设置指定的字节。返回值代表一个字节,所以返回值的合法范围是十六进制0x00到0xFF 或者十进制0至
255。

例如:将一个ASCII 字符串复制进buffer,每次一个字节:

str = "node.js", buf = new Buffer(str.length), i;for (var i = 0; i < str.length ; i += 1) {}console.log(buf); // node.js```

Buffer.byteLength(string, encoding=’utf8’)

返回字符串的实际字节数。这个函数和String.prototype.length 不同,后者返回字符串的字符数。

str = ‘\u00bd + \u00bc = \u00be’;
console.log(str + “: ” + str.length + ” characters, ” +
Buffer.byteLength(str, ‘utf8’) + ” bytes”);
// ½ + ¼ = ¾: 9 characters, 12 bytes“`

buffer.length

buffer 的大小(以字节为单位)。请注意,这个不是存放内容的大小,而是分配给buffer 对象的内存大小。这个
大小不随buffer 中存放内容的多少而改变。

buf = new Buffer(1234);
console.log(buf.length);
buf.write("some string", "ascii", 0); console.log(buf.length); // 1234 // 1234```buffer.copy(targetBuffer, targetStart, sourceStart, sourceEnd=buffer.length)

在两个buffer 之间执行内存拷贝。

例如:新建两个buffer 对象,然后将buf1中16至19字节拷贝到buf2中第八字节开始的空间中。

buf1 = new Buffer(26),
buf2 = new Buffer(26),
i;
for (var i = 0 ; i < 26 ; i += 1) {
buf1[i] = i + 97; // 97 is ASCII a
buf2[i] = 33; // ASCII !
}
buf1.copy(buf2, 8, 16, 20);
console.log(buf2.toString('ascii', 0, 25));```

buffer.slice(start, end)

返回和老的buffer 引用同一段内存的新buffer 对象,但是开始和结束的位置由start 和end 参数指定。
修改新的buffer 对象将会改动原来的buffer。

例如:使用字母表建立一个buffer 对象,并剪切出一个新的buffer,然后修改原始buffer 的一个字节。

buf1 = new Buffer(26), buf2, i;for (var i = 0 ; i < 26 ; i += 1)
{buf1[i] = i + 97; // 97 is ASCII a
{
buf2 = buf1.slice(0, 3); console.log(buf2.toString('ascii', 0, buf2.length)); buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length)); // abc // !bc```

node.js 系列——Buffer相关推荐

  1. 【深入浅出Node.js系列十一】Node.js开发框架Express4.x

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出Node.js系列 [深入浅出Node.js系列一]什么是Node.js [深入浅出Node.js系列二]N ...

  2. 7.node.js的Buffer(缓冲区)的合并(concat)、比较(compare)、拷贝(copy)和裁剪(slice)以及如何转化为JSON对象

    文章目录 node.js的Buffer(缓冲区)之二 如何将Buffer转化为JSON对象 Buffer的合并(concat)和比较(compare) Buffer的拷贝(copy)和裁剪(slice ...

  3. Node.js:Buffer基础

    文章目录 创建Buffer对象 Buffer对象的常用方法 1. Buffer.from(string[, encoding]) 2. Buffer.from(array) 3. Buffer.all ...

  4. Node.js 系列:构建原生 Node.js 应用

    原生 Node.js 应用 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效 Nod ...

  5. Node.js系列之node.js初探

    官方介绍:Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable n ...

  6. Node.js系列-----数据库MySQL

    一.数据库MySQL 1.1. 为什么要使用数据库 任何的软件系统都需要存放大量的数据,这些数据通常是非常复杂和庞大的: 比如用户信息包括姓名.年龄.性别.地址.身份证号.出生日期等等: 比如商品信息 ...

  7. 【NODE.JS】Buffer

    Buffer是一个Array的对象,主要用于操作字节. 目录 1. 模块结构 2. Buffer对象 3. Buffer内存分配 4. Buffer的转换 5. Buffer的拼接 6. 正确拼接Bu ...

  8. node.js Stream Buffer FsPromise

    Stream: 类似这样:a.pipe(b).pipe(c); 我想写一个b.所以: var rs=new (require('stream').Readable)(); var ws=new (re ...

  9. node.js将buffer对象转换为json对象

    d 是buffer对象 let jsstr = JSON.stringify(d);let jsondata = JSON.parse(jsstr);let buf = new Buffer(json ...

最新文章

  1. vs怎么编译php文件,vscode怎么初始编译
  2. numpy中的tile函数
  3. radio按扭设置只读_disabled属性样式问题
  4. Python Qt GUI快速编程第六章代码分析
  5. cdn加载vue很慢_Vue.js 项目打包优化实践
  6. 在shell中全局变量与局部变量的区别及其举例
  7. 基于SpringBoot+WebMagic实现一个的爬虫框架
  8. eclipse报错找不到tools.jar
  9. java+c#+json+时间_Java与C#间json日期格式互转完美解决方案
  10. 台电tbook10s官方固件_台电TbooK 10 S (E5N5)-双系统平板电脑固件
  11. 赫伯特·西蒙前半生泡妞打架,后半生拿图灵奖、诺贝尔奖,成人工智能大神
  12. 嵌入式Linux_ARM裸机_ARM汇编指令用法说明1:global/ldr,str/mcr,mrc/bic,orr/bl b/ 汇编写延时
  13. 雷电html查看程序编辑程序,雷电模拟器应用操作
  14. 网卡statis数据内核过程分析
  15. LORA智能巡检手持机|无线数据采集终端
  16. 操作系统【动态分区分配算法——首次适应算法、最佳适应算法、最坏适应算法、临近适应算法】
  17. Config配置文件操作
  18. 运营级低延时网络直播平台建设解决方案
  19. 怎么把foxmail的邮件和服务器同步,foxmail客户端导入邮件但是网页端没有同步,怎么处理呢[foxmail]-上海腾曦网络...
  20. C标准库 ctype

热门文章

  1. 【web前端特效源码】使用 HTMLCSSJavaScript实现各种跳跃浮动慢跑翻转旋转坠落的魔幻文字动画效果~太上头了~/动画效果|前端开发|IT软件开发基础入门教程|网页制作|网站开发定制
  2. About Axure(1)
  3. linux打开.cfg文件,cfg文件怎么打开?cfg是什么文件?
  4. 思科防火墙——实验练习加命令
  5. 学计算机激励标语口号,激励学习标语
  6. msbuild ConfuserEx.Build 加密
  7. WebRTC基础实践 - 7. 配置信令服务
  8. 使用SRS搭建流服务器使用ffmpeg推流用VLC拉流
  9. 工具栏的打印图标不见了_显示屏下方的工具栏里的小图标不见了怎么弄回来
  10. CefSharp 常用设置