zoukankan      html  css  js  c++  java
  • [Node.js]Buffer

    摘要

    在js中是没有二进制类型的,但在处理tcp或者文件流时,必须使用到二进制数据,因此Node.js定义了一个Buffer类型,该类型用来创建一个专门存储二进制数据的缓存区。在Node.js中,Buffer类是随Node内核一起发布的核心库。Buffer库为Node.js带来了一种存储原始数据的办法,可以让Node.js处理二进制数据,每当需要在Node.js中处理I/O操作中移动的数据时,就有可能使用Buffer库。原始数据存储在Buffer类的实例中。一个Buffer类似于证书数组,但她对应于V8堆内存之外的一块原始内存。

    创建Buffer类

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

    //方式一
    var buf=new Buffer(10);
    //方式二 通过给定的数组 创建Buffer实例
    var buf2=new Buffer([10,20,30,40,50]);
    //方式三 通过一个字符串创建Buffer实例
    //utf-8是默认的编码方式,此外它同样支持一下编码:“ascii”,“utf8”,"utf16le","ucs2","base64"."hex"
    var buf3=new Buffer("Hello buffer wolrd","utf-8");

    写入缓存区

    语法

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

    参数描述

    string:写入缓存区的字符串。

    offset:缓存区开始写入的位置索引,默认为0.

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

    encoding:使用的编码,默认为utf8.

    返回值

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

    一个例子:

    var buf=new Buffer(256);
    var len=buf.write("Hello buffer world");
    console.log("写入字节数:"+len);

    执行

    读取数据

    语法

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

    参数描述

    encoding:使用编码,默认为utf8.

    start:开始读取的位置索引。默认为0

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

    返回值

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

    一个例子

    var buf=new Buffer(26);
    for (var i = 0; i <26; i++) {
        buf[i]=i+97;
    };
    console.log(buf.toString("ascii"));
    console.log(buf.toString("ascii",0,5));
    console.log(buf.toString("utf8",0,5));
    console.log(buf.toString(undefined,0,5));

    将Buffer转换为Json对象

    语法

    buf.toJSON()

    返回值

    返回json对象。

    一个例子

    var buf=new Buffer("Hello buffer world.");
    var json=buf.toJSON();
    console.log(json);

    缓冲区合并

    语法

    Buffer.concat(list[,totalLength])

    参数描述

    list:用于合并的Buffer对象数据列表。

    totalLength:指定合并后Buffer对象的总长度。

    返回值

    返回一个多个成员合并的新Buffer对象。

    一个例子

    var buf1=new Buffer("Hello buffer ");
    var buf2=new Buffer("world.");
    var buf3=Buffer.concat([buf1,buf2]);
    
    console.log("合并后内容:"+buf3.toString());

    执行

    缓冲区比较

    Buffer的比较函数在Node.js v0.12.2版本引入,语法如下

    buf.compare(otherBuffer)

    参数

    otherBuffer:与buf对象比较的另外一个Buffer对象。

    返回值

    返回一个数字,标识buf在otherBuffer之前,之后或者相同。

    一个例子

    var buf1=new Buffer("ABC");
    var buf2=new Buffer("ABCD");
    var result=buf1.compare(buf2);
    
    if (result<0) {
        console.log(buf1+" 在 "+buf2+" 之前");
    }else if(result==0){
        console.log(buf1+" 与 "+buf2+" 相同");
    }else{
        console.log(buf1+" 在 "+buf2+" 之后");
    }

    拷贝缓存区

    语法

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

    参数

    targetBuffer:要拷贝的Buffer对象。

    targetStart:要拷贝的对象开始位置,默认0.

    sourceStart:源对象开始位置,默认0

    sourceEnd:源对象结束位置,默认0

    无返回值。

    一个例子

    var buf1=new Buffer("ABC");
    var targetBuf=new Buffer(3);
    buf1.copy(targetBuf);
    console.log(targetBuf.toString());

    缓冲区裁剪

    语法

    buf.slice([start[, end]])

    参数

    start:开始裁剪位置。

    end:结束位置。

    返回值

    返回一个新的缓冲区,它和旧缓冲区执行同一块内存,但是从索引start到end的位置剪切。

    一个例子

    var buf1=new Buffer("wolfy");
    var buf2=buf1.slice(0,2);
    console.log(buf2.toString());

    缓存区长度

    语法

    buf.length

    返回值

    返回Buffer对象所占用的内存长度。

    一个例子

    var buf1=new Buffer("wolfy");
    var buf2=buf1.slice(0,2);
    console.log(buf2.toString());
    console.log(buf2.length);

    方法参考手册

    http://www.runoob.com/nodejs/nodejs-buffer.html

  • 相关阅读:
    php实现多张图片打包下载
    bootstrap的简单学习
    接口的简单调用模式
    oracle 日期常用函數 (SYSDATE、日期格式)
    php通过ajax请求数据后台返回数据要求和前台解析
    jquery+ajax实现分页
    Fatal error: Call to undefined function curl_init()问题
    利用php比较精确的统计在线人数的办法
    sql服务器启动不了问题
    字符串字母大小写转换(10)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/6344588.html
Copyright © 2011-2022 走看看