1.1.  Buffer基本概念

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。二进制可以存储电脑中任何数据(比如:一段文本、一张图片、一个硬盘,应该说电脑中所有的数据都是二进制。)NodeJs是服务端在处理像TCP(网络)流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

1.2  Buffer创建

Buffer 对象可以通过多种方式来创建。

1.2.1.   方法 1

创建长度为 10 字节(1kb=1024byte  1byte=8bit)的 Buffer 实例:

var buf = new Buffer(10);

1.2.2.   方法 2

通过给定的数组创建 Buffer 实例:

var buf = new Buffer([10, 20, 30, 40, 50]);

1.2.3.   方法 3

通过一个字符串来创建 Buffer 实例:

var buf = new Buffer("www.itsource.com", "utf-8");

utf-8 是默认的编码方式,此外它同样支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。

1.3 buffer的长度

buffer length的长度为字节,所以该长度并不是文本的长度,而是文本储存在内存中的字节数。比如我的长度ch中是长度1,但是存储在内存中的字节为3

var buffer = new Buffer('我');
console.log(buffer.length)

打印结果为 : 3

1.4 Buffer写入内容

语法

buf.write(string[, offset[, length]][, encoding])

参数

参数描述如下:

string - 写入缓冲区的字符串。

offset - 缓冲区开始写入的索引值,默认为 0 。

length - 写入的字节数,默认为 buffer.length

encoding - 使用的编码。默认为 'utf8' 。

返回值

返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串。

实例:

var buf = new Buffer(256);

len = buf.write("www.itsource.com");

console.log("写入字节数 : "+  len);
中文存储实例:
buffer = new Buffer(256);
buffer.fill(0)
buffer.write("我爱你");
console.log(buffer.toString())

结果:我爱你

var buffer = new Buffer('我爱你');
console.log(buffer.toString())
console.log(buffer.length)
buffer.write('hell',3,3);//偏移3个字节(pass过‘我’,从‘爱’开始替换),替换3个字节,刚好把‘爱’替换掉
console.log(buffer.toString())

结果:

我爱你

我hel你

1.5 Buffer读取内容(转换为字符串)

语法:

读取 Node 缓冲区数据的语法如下所示:

buf.toString([encoding[, start[, end]]])

参数:

参数描述如下:

encoding - 使用的编码。默认为 'utf8' 。

start - 指定开始读取的索引位置,默认为 0。

end - 结束位置,默认为缓冲区的末尾。

返回值:

解码缓冲区数据并使用指定的编码返回字符串。

var buf = new Buffer([,,]);
console.log(buf.toString());
var s = "qq";
s+=buf;//转换为字符串
console.log(s);

结果:

abc
qqabc

1.6读取json内容

var buf = new Buffer('{"name":"二狗","age":"18"}');
console.log(JSON.parse(buf));

结果:

{ name: '二狗', age: '' }

1.7  Buffer拷贝

拷贝一个Buffer的某一段到操作对象中。

语法

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])

参数

参数描述如下:

targetBuffer - 要拷贝的 Buffer 对象。

targetStart - 数字, 可选, 默认: 0

sourceStart - 数字, 可选, 默认: 0

sourceEnd - 数字, 可选, 默认: buffer.length

返回值:

没有返回值。

实例:

var buffer1 = new Buffer('ABC');

// 拷贝一个缓冲区

var buffer2 = new Buffer(); //只能拷3个字节

buffer1.copy(buffer2);

console.log("buffer2 content: " + buffer2.toString());

结果:

buffer2 content: ABC

最新文章

  1. Hibernate组件和关联映射
  2. 设置 tableview 的背景 颜色 和清空
  3. guava学习--File1
  4. 命令行参数(argc, argv)
  5. 17.把字符串转换成整数[atoi]
  6. android开源项目---developer篇
  7. 三星N8000/N8010通用刷机教程
  8. Lucida Grande字体无法正常显示冒号的解决方案
  9. python【第十六篇】DOM
  10. 【模拟】NEERC15 A Adjustment Office (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
  11. jquery append 动态添加的元素事件on 不起作用问题的解决
  12. 体验下Xcode5与ios7
  13. 用python发送GET和POST请求
  14. powerpc e500系列,linux初始化的tlb汇编,添加人肉代码注释
  15. javascript 拖放效果
  16. ELF文件格式分析--结构篇
  17. 64、django之模型层(model)--建表、查询、删除基础
  18. Hibernate入门(五)---------事务管理
  19. Metasploit渗透测试梗概
  20. codeforces509B

热门文章

  1. RPC框架 - thrift 服务端
  2. 宏基笔记本升级bios(2012-12-28-bd 写的日志迁移
  3. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章
  4. Python9-IO模型-day41
  5. GTF/GFF
  6. jmeter XML格式的结果中各属性的含义
  7. python协程--yield和yield from
  8. mysql查询当天的数据
  9. DEDE调用指定文章ID来调用特定文档
  10. [oldboy-django][6其他]学习django网站推荐