zoukankan      html  css  js  c++  java
  • NodeJS缓冲区

    NodeJS缓冲区

    JavaScript语言本身在I/O时只有字符串数据类型,没有二进制数据类型,但在处理流数据时,必须用到二进制数据,因此在Node中,定义了一个Buffer类作为存放二进制数据的缓冲区

    缓冲区存放与内存中

    创建

    // 创建长度为5字节的Buffer实例
    var buf = new Buffer(5);
    console.log(buf); //<Buffer 00 00 00 00 00>
    // 可以用数组指定buffer内容
    var buf = new Buffer([10,20,30,40,50]);
    console.log(buf); //<Buffer 0a 14 1e 28 32>
    // 字符串方式创建,默认编码方式为utf-8
    var buf = new Buffer("hello world!","utf-8");
    console.log(buf); //<Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 21>
    

    写入字符串

    // 创建长度为5字节的Buffer实例
    var buf = new Buffer(5);
    // buffer空间不足,只会写入前面部分
    buf.write("hello world");
    console.log(buf.toString()); //hello world
    

    写入整数,浮点也可以,要用writeInt,writeDouble之类

    读取数据

    var buf = new Buffer(3);
    for(var i = 0; i<buf.length; i++){
        buf[i] = i + 65;
    }
    // 转为字符串
    console.log(buf.toString());
    // 转为JSON对象
    console.log(buf.toJSON());
    
    /*输出*/
    ABC
    { type: 'Buffer', data: [ 65, 66, 67 ] }
    

    缓冲区合并

    var buf1 = new Buffer("hello");
    var buf2 = new Buffer(" ");
    var buf3 = new Buffer("world!");
    // 使用concat拼接,可以再加一个最大长度的限制
    var result = Buffer.concat([buf1, buf2,buf3]);
    console.log(result.toString());
    
    /*输出*/
    hello world!
    

    缓冲区比较

    var buf = new Buffer('abc');
    // 大于的结果是1
    console.log(Buffer.compare(buf,new Buffer('a')));
    // 等于的结果是0
    console.log(Buffer.compare(buf,new Buffer('abc')));
    // 小于的结果是-1
    console.log(Buffer.compare(buf,new Buffer('bBc')));
    

    缓冲区复制

    var buf1 = new Buffer('abc');
    var buf2 = new Buffer(buf1.length); // 新建另一个对象
    var buf3 = buf1; // 指向同一个对象,浅复制
    
    buf1.copy(buf2); // 深复制
    buf1[0] = 65; //'A'
    
    console.log(buf1.toString());
    console.log(buf2.toString());
    console.log(buf3.toString());
    
    /*输出*/
    Abc
    abc
    Abc
    

    缓冲区裁剪

    var buf1 = new Buffer('hello world');
    var buf2 = buf1.slice(1,3); //取[1:3)中的内容
    buf2[0] = 65; //'A',注意是浅复制
    console.log(buf1.toString());
    console.log(buf2.toString());
    
    /*输出*/
    hAllo world
    Al
    
  • 相关阅读:
    101与金根回顾敏捷个人:(93)《做最好的自己》之成功同心圆
    ArchiMate - 发布【企业架构语言ArchiMate v0.5.pdf】
    blog推荐 - 软件产品管理之Tyner Blain
    家庭创意:春节寻宝习俗
    流程 - 发布【敏捷方法之Scrum v0.2.pdf】
    个人管理 - 使用Scrum来敏捷自己
    blog推荐 - 电子图书与IT文档资料(ITPUB论坛)
    架构语言ArchiMate -应用层(Application Layer)
    架构语言ArchiMate - ArchiMate提供的基本视角(Viewpoints)介绍一
    故事:两只老虎的悲惨结局
  • 原文地址:https://www.cnblogs.com/fanghao/p/7812956.html
Copyright © 2011-2022 走看看