内容:Buffer与字符编码,Buffer创建、写入、读取、转换成JSON对象、合并、比较、拷贝、裁剪、长度

Buffer 与字符编码
Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。

const buf = Buffer.from('runoob', 'ascii');
// 输出 72756e6f6f62
console.log(buf.toString('hex'));
// 输出 cnVub29i
console.log(buf.toString('base64'));

##############################################################################################
创建 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');

############################################################################################
写入缓冲区
###语法
写入 Node 缓冲区的语法如下所示:
buf.write(string[, offset[, length]][, encoding])
###参数
参数描述如下:
    • string - 写入缓冲区的字符串。
    • offset - 缓冲区开始写入的索引值,默认为 0 。
    • length - 写入的字节数,默认为 buffer.length
    • encoding - 使用的编码。默认为 'utf8' 。
根据 encoding 的字符编码写入 string 到 buf 中的 offset 位置。 length 参数是写入的字节数。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。 只部分解码的字符不会被写入。
###返回值
返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。
###实例

buf = Buffer.alloc(256);
len = buf.write("love A");
console.log("写入字节数 : "+ len);

执行以上代码,输出结果为:
写入字节数 : 14

#############################################################################################
从缓冲区读取数据
###语法
读取 Node 缓冲区数据的语法如下所示:
buf.toString([encoding[, start[, end]]])
###参数
参数描述如下:
    • encoding - 使用的编码。默认为 'utf8' 。
    • start - 指定开始读取的索引位置,默认为 0。
    • end - 结束位置,默认为缓冲区的末尾。
###返回值
解码缓冲区数据并使用指定的编码返回字符串。
###实例

buf = Buffer.alloc(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 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(buf);
// 输出: {"type":"Buffer","data":[1,2,3,4,5]}
console.log(json);
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ? Buffer.from(value.data) : value;
});
// 输出: <Buffer 01 02 03 04 05>
console.log(copy);

执行以上代码,输出结果为:
<Buffer 01 02 03 04 05>
{"type":"Buffer","data":[1,2,3,4,5]}
<Buffer 01 02 03 04 05>

##############################################################################################
缓冲区合并
###语法
Node 缓冲区合并的语法如下所示:
Buffer.concat(list[, totalLength])
###参数
参数描述如下:
    • list - 用于合并的 Buffer 对象数组列表。
    • totalLength - 指定合并后Buffer对象的总长度。
###返回值
返回一个多个成员合并的新 Buffer 对象。
###实例

var buffer1 = Buffer.from(('Love'));
var buffer2 = Buffer.from(('A'));
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());

执行以上代码,输出结果为:
buffer3 内容: Love A

##############################################################################################
缓冲区比较
###语法
buf.compare(otherBuffer);
###参数
    • otherBuffer - 与 buf 对象比较的另外一个 Buffer 对象。
###返回值
返回一个数字,表示 buf 在 otherBuffer 之前,之后或相同。
###实例

var buf1 = Buffer.from('zabc');
var buf2 = Buffer.from('xq');
var result = buf1.compare(buf2); if(result < 0){
console.log(buf1.toString()+'在'+buf2.toString()+'之前');
}else if (result === 0){
console.log(buf1.toString()+'与'+buf2.toString()+'相同');
}else {
console.log(buf1.toString()+'在'+buf2.toString()+'之后');
}

执行以上代码,输出结果为:
zabc在xq之后

##########################################################################################
拷贝缓冲区
###语法
Node 缓冲区拷贝语法如下所示:
buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
###参数
参数描述如下:
    • targetBuffer - 要拷贝的 Buffer 对象。
    • targetStart - 数字, 可选, 默认: 0
    • sourceStart - 数字, 可选, 默认: 0
    • sourceEnd - 数字, 可选, 默认: buffer.length
###返回值
没有返回值。
###实例

var buf1 = Buffer.from('abcdefghijkl');
var buf2 = Buffer.from('RUNOOB');
//将 buf2 插入到 buf1 指定位置上
buf2.copy(buf1, 2);
console.log(buf1.toString());

执行以上代码,输出结果为:
abRUNOOBijkl

###########################################################################################
缓冲区裁剪
Node 缓冲区裁剪语法如下所示:
buf.slice([start[, end]])
###参数
    • start - 数字, 可选, 默认: 0
    • end - 数字, 可选, 默认: buffer.length
###返回值
返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。
###实例

var buffer1 = Buffer.from('runoob');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());

执行以上代码,输出结果为:
buffer2 content: ru

##########################################################################################
缓冲区长度
语法
Node 缓冲区长度计算语法如下所示:
buf.length;
返回值
返回 Buffer 对象所占据的内存长度。
实例

var buffer = Buffer.from('www.XXXXXXX.com');
// 缓冲区长度
console.log("buffer length: " + buffer.length);

8、Node.js Buffer(缓冲区)的更多相关文章

  1. Node.js Buffer(缓冲区)

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

  2. Node.js Buffer

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

  3. Node.js——Buffer

    介绍 JavaScript没有读取和操作二进制数据流的机制,但是 node.js 引入了Buffer 类型,可以操作TCP流或者文件流 使用Buffer可以用来对临时数据(二进制数据)进行存储,当我们 ...

  4. 23. Node.Js Buffer类(缓冲区)-(三)文件读取实例

    转自:https://blog.csdn.net/u011127019/article/details/52513109

  5. 22. Node.Js Buffer类(缓冲区)-(二)

    转自:https://blog.csdn.net/u011127019/article/details/52512242

  6. 21. Node.Js Buffer类(缓冲区)-(一)

    转自:https://blog.csdn.net/u011127019/article/details/52512242

  7. node.js—Buffer类(二进制数据处理模块)

    Buffer类概述 一个用于更好的操作二进制数据的类 我们在操作文件或者网络数据的时候,其实操作的就是二进制数据流 Node为我们提供了一个更加方便的去操作这种数据流的类 Buffer,他是一个全局的 ...

  8. Node.js:Buffer

    ylbtech-Node.js:Buffer 1.返回顶部 1. Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文 ...

  9. Node.js缓存

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

随机推荐

  1. 《Think Python》第5章学习笔记

    目录 5.1 整除和取模(Floor division and modulus) 5.2 布尔表达式(Boolean expressions) 5.3 逻辑运算符(Logical operators) ...

  2. [转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志

    本文转自:http://www.cnblogs.com/weiweictgu/p/5848805.html 1.升级到log4net的最新版 PM下执行 Install-Package log4net ...

  3. Redis 【string】 一句话说明

    APPEND----------------------------------------------在字符串后面追加 BITCOUNT------------------------------- ...

  4. jQuery选择器,外加例子讲解

    jQuery选择器的优势: (1) 代码更简单(2) 支持CSS1到CSS3选择器(3) 完善的处理机制 jQuery选择器的分类 (1) 基本选择器 基本选择器是jQuery中使用最多的选择器,它又 ...

  5. 关于vue.js中slot的理解

    slot这块看官网文档,起初有点不懂,仔细研究还是最终理解了,slot是用来干嘛的呢,先看下一个例子: <script src="https://unpkg.com/vue/dist/ ...

  6. [JAVA IDEA]在使用maven项目中,无法读取resources文件夹中的配置文件的一种解决方案

    1.在通过配置文件来连接数据库时,在resouces文件中放入了db.properties配置文件,但无法正常读取到 读取配置文件信息的代码: InputStream input=JdbcUtil.c ...

  7. aabb问题

    输出所有aabb型的完全平方数 这个问题主要是提供一个判断完全平方的思路,就是用floor函数 #include <iostream> #include <string> #i ...

  8. H5 Js图片转base64编码

    <!Doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. 深入理解Java虚拟机---类加载机制(简略版)

    类加载机制 谈起类加载机制,在这里说个题外话,当初本人在学了两三个月的Java后,只了解了一些皮毛知识,就屁颠屁颠得去附近学校的招聘会去蹭蹭面试经验,和HR聊了一会后开始了技术面试,前抛出了两个简单的 ...

  10. bitset(01串)优化

    bitset的经典使用: 见代码及注释: #include<bitset> #include<algorithm> using namespace std; //只需调用< ...