标准模块Buffer
Buffer类似与一个整形数组, Buffer也一样用require(‘name’)赋值给本地变量
例如:var Buffer = require(‘buffer’).Buffer;
1. new Buffer(size)
在v8的堆上申请一块大小为size的内存。
var sys = require(‘sys’),//获取标准模型sys,利用sys提供的puts打印数据 Buffer = require(‘buffer’).Buffer, buf = new Buffer(20); sys.puts(buf.length); //print 20
如果使用之前不new可以直接赋值吗?可以的,但是不能给指定下标的赋值,这样看来他还是个动态数组。大小和机器有关。一旦赋值以后,就可以在根据索引来访问了。
2. buffer.write(string,encoding,offset)
用encoding编码方式写一个字符串在offset位置,返回写入buffer的数据长度。如果new出来的buffer空间不够容纳字符串,字符串将截断。
例子:
var sys = require(‘sys’), Buffer = require(‘buffer’).Buffer, buf = new Buffer(5), len; len = buf.write(‘helloworld’,’ascii’,0); sys.puts(len + “bytes “ + buf.toString(‘ascii’,0,len);//print 5 bytes: hello
3. buffer.toString(encoding,start,end)
解码用encoding方法编码的Buffer数据,从start位置开始到end位置结束,返回解码后的字符串。
例子见上面buffer.write().
4. buffer[index]
前面说到buffer类似于一个int型数组,可以通过索引来访问,设置值。因为是字节,所以涉及到一个取值范围,0—255
例子:
var sys = require(‘sys’), Buffer = require(‘buffer’).Buffer, str = ‘helloworld’, buf = new Buffer(str.length); for(var i=0;i<str.length;i++){ buf[i] = str.charCodeAt(i); } sys.puts(buf); sys.puts(‘--------------------‘); for(var i=0;i<buf.length;i++){ sys.puts(String.fromCharAt(buf[i])); } //输出结果: helloworld -------------------- h e l l o w o r l d
5. Buffer.byteLength(string,encoding)
返回buffer内真实字节数,和字符串的string不同
例子:
var sys = require(‘sys’), Buffer = require(‘buffer’).Buffer, str = ‘\u00bd + \u00bc = \u00be’; sys.puts(str + “:str.length”+ str.length +”bytes “ + Buffer.byteLength(str,’utf8’));
6. buffer.length
返回buffer的数据长度。例子里已经用到过。
7. buffer.copy(targetBuffer,targetStart,sourceStart,sourceEnd)
内存拷贝,从buffer的第targetStart位置开始,拷贝sourceEnd-sourceStart个字节到目标buffer里,放到目标buffer,从sourceStart的位置起。
例子:
var sys = require(‘sys’), Buffer = require(‘buffer’).Buffer, Buf1 = new Buffer(26), Buf2 = new Buffer(100); for(var i=0;i<26;i++){ Buf1[i] = i+97; //a-z } sys.puts(Buf1); Buf1.copy(Buf2,0,0,10); sys.puts(Buf2); //输出:abcdefghijklmnopqrstuvwxyz abcdefghij
8. buffer.slice(start,end)
从buffer里截取一个新的buffer,从buffer的start开始到end位置结束。
例子:
var sys = require(‘sys’), Buffer = require(‘buffer’).Buffer, buf1 = new Buffer(26), buf2; for(var i=0;i<26;i++){ buf1[i] = i+97; } buf2 = buf1.slice(3,8); sys.puts(buf2); //输出:defgh
虽然Buffer和int型数组相似,但是它不支持push(),shift(),unshift(),pop()等方法。