zoukankan      html  css  js  c++  java
  • 【07】node 之 Buffer

    1.1.  Buffer基本概念

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。二进制可以存储电脑中任何数据(比如:一段文本、一张图片、一个硬盘,应该说电脑中所有的数据都是二进制。)NodeJs是服务端在处理像TCP(网络)流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

    1.2  Buffer创建

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

    1.2.1.   方法 1

    创建长度为 10 字节(1kb=1024byte  1byte=8bit)的 Buffer 实例:

    var buf = new Buffer(10);

     

    1.2.2.   方法 2

    通过给定的数组创建 Buffer 实例:

    var buf = new Buffer([10, 20, 30, 40, 50]);

     

    1.2.3.   方法 3

    通过一个字符串来创建 Buffer 实例:

    var buf = new Buffer("www.itsource.com", "utf-8");

    utf-8 是默认的编码方式,此外它同样支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。

    UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。

    1.3 buffer的长度

    buffer length的长度为字节,所以该长度并不是文本的长度,而是文本储存在内存中的字节数。比如我的长度ch中是长度1,但是存储在内存中的字节为3

     

     

    var buffer = new Buffer('');
    console.log(buffer.length)

    打印结果为 : 3

    1.4 Buffer写入内容

    语法

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

    参数

    参数描述如下:

        string - 写入缓冲区的字符串。

        offset - 缓冲区开始写入的索引值,默认为 0 。

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

        encoding - 使用的编码。默认为 'utf8' 。

    返回值

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

    实例:

    var buf = new Buffer(256);
    
    len = buf.write("www.itsource.com");
    
    console.log("写入字节数 : "+  len);
    中文存储实例:
    buffer = new Buffer(256);
    buffer.fill(0)
    buffer.write("我爱你");
    console.log(buffer.toString())
    

    结果:我爱你

    var buffer = new Buffer('我爱你');
    console.log(buffer.toString())
    console.log(buffer.length)
    buffer.write('hell',3,3);//偏移3个字节(pass过‘我’,从‘爱’开始替换),替换3个字节,刚好把‘爱’替换掉
    console.log(buffer.toString())

    结果:

    我爱你
    9
    我hel你

    1.5 Buffer读取内容(转换为字符串)

    语法:

    读取 Node 缓冲区数据的语法如下所示:

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

    参数:

    参数描述如下:

        encoding - 使用的编码。默认为 'utf8' 。

        start - 指定开始读取的索引位置,默认为 0。

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

    返回值:

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

    var buf = new Buffer([97,98,99]);
    console.log(buf.toString());
    var s = "qq";
    s+=buf;//转换为字符串
    console.log(s);

    结果:

    abc
    qqabc

    1.6读取json内容

    var buf = new Buffer('{"name":"二狗","age":"18"}');
    console.log(JSON.parse(buf));

    结果:

    { name: '二狗', age: '18' }

    1.7  Buffer拷贝

    拷贝一个Buffer的某一段到操作对象中。

    语法

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

    参数

    参数描述如下:

        targetBuffer - 要拷贝的 Buffer 对象。

        targetStart - 数字, 可选, 默认: 0

        sourceStart - 数字, 可选, 默认: 0

        sourceEnd - 数字, 可选, 默认: buffer.length

    返回值:

    没有返回值。

    实例:

    var buffer1 = new Buffer('ABC');
    
    // 拷贝一个缓冲区
    
    var buffer2 = new Buffer(3); //只能拷3个字节
    
    buffer1.copy(buffer2);
    
    console.log("buffer2 content: " + buffer2.toString());

    结果:

    buffer2 content: ABC

     

  • 相关阅读:
    Sublime Text3 支持Less
    Typescript + React-Router + Webpack 实现按需打包/加载
    从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境
    JavaScript中的一些小细节
    微信小程序(safair浏览器)flex布局中的坑
    使用YQL解决让前端爬取网页并解析
    react diff算法剖析总结
    微信小程序IOS系统中,倒计时(setInterval函数)失效的问题
    微信小程序中未解决的坑
    利用nodejs监控文件变化并使用sftp上传到服务器
  • 原文地址:https://www.cnblogs.com/yeziTesting/p/7135976.html
Copyright © 2011-2022 走看看