`
kiny
  • 浏览: 6923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

服务器端Javascript标准模块---Buffer

阅读更多

标准模块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,从bufferstart开始到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

 

虽然Bufferint型数组相似,但是它不支持push(),shift(),unshift(),pop()等方法。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics