node.js 的 Buffer 方法的简单介绍
2018-01-07 21:16
671 查看
Buffer
Buffer 函数是调用系统内存的方法,node环境输入 Buffer 得出poolSixe : 内存载体的容量
isBuffer : 静态方法 ,判断对象是否是 Buffer 类型对象
compare : 判断两个 Buffer 对象的相对位置,一般来做按字符串的排序什么的
isEncoding : 判断node.js 是否支持某种编码
concat : 主要是将几个 Buffer 对象连接组成一个新的 Buffer对象,可以手动分配空间大小,如果空间不够,数据会被截断
byteLength : 用来获得指定编码下字符串所占的字符数
toString
toString 把 buffer 数据转成 xx 编码,默认不传是 uft-8 格式示例
var buf = new Buffer('Hello'); var str = buf.toString('base64'); // 把 buffer 数据转成 base64 编码 str //就输出了 base64 格式的数据 'SGVsbG8=' //现在把 base64 转换还原回来 var buf2 = new Buffer('SGVsbG8=','base64'); //创建一个 buffer ,指定编码为 base64 var str = buf.toString('utf-8'); //不写也可以默认为 uft-8 str 就输出了 'Hello' //其它转换也是同理
write
Buffer.write(string , offset=0 , length, encoding="utf-8")write 是把数据写入 Buffer 中
第一个参数是要写入的字符串 ,
第二个参数是 字符串转换为字节数据后写入的位置
第三个参数是 字符串转换为字节数据后写入的长度
第4个参数为指定字符串写的的编码格式,默认为 utf-8
示例:buf.write
//new 一个 var buf = new Buffer('Hello 贤哥'); buf.length //打印出来 12 (注:12是字节数,一个汉字不是一个字节) //向 buf 写入 buf.write('Hi 贤哥'); //打印出来 9 //打印出 buf 里存的东西 buf.toString() // 'Hi 贤哥哥' ???怎么会多一个哥 //再次打印 buf 长度 buf.length //打印出来 12 因为这个长度在初始化的时候就固定了 //打印出 'Hi 贤哥哥' 是因为写入的 'Hi 贤哥'的9个字节 把 'Hello 贤哥'的12个字节的前面9个给覆盖了,所后面的 12-9=3 个字节依然在,并没有变化 //向 buf 再次写入 buf.write(' ImoocImooc',2,11); // 写入 ' ImoocImooc' ,从第2个字节开始 ,写入字符串的长度为 11个字节 10 //打印出 10 的意思是写入了10个字节 buf.toString(); //打印出 'Hi ImoocImoo' 因为总字节只有12个 ,从第二个开始写入 就是 'Hi' 的后面,代码中写入的11个字节最后只写了10个进去,因为总空间只有12个,从第二个开始,空格也算一个,后面只有10个字节的空间了,所以最后那个 'c' 因为没有空间所以没有写进
copy
buffer.copy(target, tStart, sStart, sEnd=buffer.length)copy 复制
第一个参数是用来指定复制的目标 buffer
第二个参数是目标 buffer 从第几个字节开始写,默认是 0
第三个参数是用来指定从原 buffer 里获取数据时的开始位置,默认是 0
第4个参数是指定从复制源对象里面获取数据的结束位置,默认是复制源的长度(就是复制到最后一个)
示例
var buf = new Buffer('Hello Imooc'); buf.length //创建一个 buffer 共11个字节 var buf2 = new Buffer(5); //创建另一个 buffer 共5个字节 buf.copy(buf2); //把 buf 复制到 buf2 buf2.toString(); //打印出来 'Hello',buf2的空间只是5个字节,所以只写入了前5个字节 buf.copy(buf2, 0, 6 ,11); //1、把 buf 复制到 buf2 ,2、从buf2第0个字开始写入 ,3、从buf的第6个字节开始复制 ,4、复制到第11个字节 buf2.toString(); //打印出来 'Imooc'
下面是一个实用的示例
该示例是 读取图片文件 ,再从新生成一个 和 用 buffer 把图片把读出来的数据转成 base64 编码,再重新生成一个图片
var fs = require('fs'); //引入文件模块 //读取当前文件里的 img.jpg 的文件数据,同时创建到 origin_buffer 对象中 fs.readFile('img.jpg', function(err, origin_buffer) { //查看 origin_buffer 是不是一个 Buffer ,true console.log(Buffer.isBuffer(origin_buffer)) //在当前文件里写入一个新文件, 名叫new.jpg , 内容是 origin_buffer fs.writeFile('new_img.jpg', origin_buffer , function(err){ if(err){console.log(err)} }) //复制一个图片 //1、把 origin_buffer 转成 base64 编码,origin_buffer 已经是一个 Buffer 了,所以可以直接用 var base64Image = origin_buffer.toString('base64'); console.log(base64Image); //2、用 base64Image 创建一个 buffer,指定编码为 base64 var decodedImage = new Buffer(base64Image,'base64'); //可以比较一个 上面读取的 Buffer 和 转成 base64 后新创建的 Buffer 是不是一样的,结果是 true console.log(Buffer.compare(origin_buffer, decodedImage)); //3、再用 new 的 buffer 写一个新文件 fs.writeFile('new_buffer_img.jpg', decodedImage , function(err){ if(err){console.log(err)} }) //无论是直接读取生成的图片还是转成 base64 再生成的图片都是一模一样的 })
相关文章推荐
- Node.js:Buffer(缓冲区)介绍及常用方法
- node.js中的buffer.write方法使用说明
- Document对象的使用:hasChildNodes()方法,nodeName、nodeValue、nodeType的简单介绍 .
- node.js中的buffer.fill方法使用说明
- Document对象的使用:hasChildNodes()方法,nodeName、nodeValue、nodeType的简单介绍
- Centos安装Node.js简单方法
- Centos7 中 Node.js安装简单方法
- node.js中的buffer.slice方法使用说明
- 在Node.js应用中读写Redis数据库的简单方法
- Document对象的使用:hasChildNodes()方法,nodeName、nodeValue、nodeType的简单介绍
- node.js中的buffer.copy方法使用说明
- node.js中的buffer.toJSON方法使用说明
- node.js+redis之一:redis简单介绍
- Node.js Buffer 模块常用的方法
- node.js中的buffer.Buffer.isEncoding方法使用说明
- vue之node.js的简单介绍
- node.js中的buffer.fill方法使用说明
- 简单介绍js中的confirm()方法的使用
- 一个简单的node.js界面实现方法
- Node.js简单介绍