node.js 的 Buffer 方法的简单介绍

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 再生成的图片都是一模一样的
})




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值