zoukankan      html  css  js  c++  java
  • buffer小解

    Buffer代表一个缓冲区,存储二进制数据,是字节流

    创建:

    创建Buffer有4种方式:

    1.new Buffer(size) 以字节为单位创建指定大小的Buffer

    eg: var buf= new Buffer(10);

    注: 此方法创建的缓冲区在未初始化时内部数据随机,什么数据都可能有

    2.new Buffer(array) 使用字节数组来创建Buffer

    eg: var buf1= new Buffer([1, 2, 3]);  var buf2= new Buffer([0x01, 0x45, 0x78]);

    注: 字节数组可为二进制,十进制,16进制等,16进制以0x或0X开头,内容从0~255(一个字节最大255

    3.new Buffer(str[,encoding]) 使用字符串,按照指定的编码方式创建,默认utf-8

    eg: var buf3= new Buffer("aa", "utf-8");

    注: 编码方式可为: ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex

    4.new Buffer(buf) 按照buf实例创建一个buf,相当于复制

    eg: var buf4= new Buffer(buf1);

    --------------------------------------------------------------------------------------------------------------------------------------------------

    写入:

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

    按照指定的编码方式在指定位置写入指定长度

    offset默认为0,encoding默认utf-8

    ----------------------------------------------------------------------------------------------------------------------------------------------------

    读取:

    1.下标读取:(类似于数组)

    var buf= new Buffer(10); console.log(buf[1]);

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

    按照指定方式在指定起始位置读取,并返回读取到的字符的长度

    start默认0, end默认结束位置

    eg: buf.toString('ascii', 1, 8);

    3.buf.toJSON()

    将Buffer对象转变为JSON格式,与JSON.stringify()类似

    eg: 

    var buf1 = new Buffer('1234');
    console.log(buf1.toJSON());
    console.log(JSON.stringify(buf1));

    输出:

    可以看出buf.toJSON() 与JSON.stringify()功能类似,只是一个有双引号,一个没有

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    切片, 拷贝, 拼接:

    buf.slice([start[, end]])对缓存区本身进行切片处理

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

    targetStart, sourceStart默认为0,sourceEnd默认源缓冲区的结束位置,实际操作按目标缓冲区,源头缓冲区的大小来

    concat(list[,totalLength]) list为缓冲区列表,totalLength为生成的新缓冲区的总长度

     --------------------------------------------------------------------------------------------------------------------------------------------------

    对比:

    buf.equals(otherBuffer) 判断两个缓冲区是否相等,相等时返回true

    var buf1 = new Buffer('aaa1');
    var buf2 = new Buffer('a1aa');

    console.log(buf1.equals(buf2)); //false

    可看出 equals需要两个缓冲区完全相等

    buf.compare(otherBuffer) 判断两个缓冲区的大小,表示 buf 在 otherBuffer 之前,之后或相同,之前返回-1,之后返回1,相等返回0

    -----------------------------------------------------------------------------------------------------------------------------------------------------

    填充:

    buf.fill(value[, offset][, end]) 使用指定的 value 来填充这个 buffer。如果没有指定 offset (默认是 0) 并且 没有end (默认是 buffer.length) ,将会填充整个buffer。

    eg:

    var buf = new Buffer('ABCD');
    buf.fill(0);
    console.log(buf);
    console.log(buf.toString());

    输出:

    可见完全被填充,其中fill(0)实际运用中使用甚广,用于清除buffer内乱七八糟的数据,然后写入想写入的值,使用toString时便不会有以外的读取结果

  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/yanze/p/6074748.html
Copyright © 2011-2022 走看看