关于node.js:Node-Buffer缓冲区

Buffer(缓冲区)

  • Buffer的构造和数组很像,操作方法和数组也相似
  • 数组中不能存储二进制文件,而Buffer就是专门用来寄存二进制数据的
  • 它的元素为16进制的两位数。一个元素就代表一个字节

    • 所以Buffer中每一个元素的范畴都是00-ff之间
    • 00-ff转换成二进制就是00000000-11111111,这也是咱们计算机最底层的
    • 一个0或者1,咱们称之为1位(bit),8bit = 1byte(字节)
  • 在Buffer中存储的是二进制数据,然而显示的时候都是以16进制显示
  • Buffer中内存不是通过JavaScript调配的,而是底层通过C++申请的,也就是咱们能够间接通过Buffer来创立内存中的空间

    let str = 'Hello World'
    
    // 将一个字符串转换为Buffer
    let bufStr = Buffer.from(str)
    // 如何转换成字符串呢?
    let newStr = bufStr.toString()
    
    console.log(bufStr)
    // <Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>
    console.log(newStr)
    // Hello World
创立指定大小的Buffer
  • Buffer的大小,一旦创立好就能批改了
  • 老的办法,Buffer构造函数的形式,不举荐应用,官网说行将废除

    // 创立一个10个字节的Buffer
    let buf = new Buffer(10)
  • 新的形式一:alloc

    // 创立一个10个字节的Buffer
    let buf = Buffer.alloc(10)
    buf[0] = 66
    buf[1] = 255
    buf[2] = 0xaa // 这些写法是间接赋值一个16进制的数据,16进制的数据,就是`0x`结尾
    
    console.log(buf)
    console.log(buff[2]) // 后果是170,为什么不是aa呢?因为只有数字在控制台或页面中输入,肯定是10进制
  • 新的形式二:allocUnsafe

    // 创立一个10个字节的Buffer
    // 和alloc根本一样,只是allocUnsafe创立的Buffer中可能会含有敏感数据
    // 什么意思呢?alloc在创立的时候,会清空那一块内存,而allocUnsafe不会清空,也就是说之前的数据,可能会泄露进去
    // 既然如此,为什么还要allocUnsafe呢?因为allocUnsafe的效率更高,然而咱们失常来说还是应用alloc
    let buf = Buffer.allocUnsafe(10)
    console.log(buf)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理