005Buffer(缓冲区)

[A] 基本知识

         更多Buffer信息:https://www.runoob.com/nodejs/nodejs-buffer.html

  1. Buffer的存在就是来弥补传统的数组的不足(不能存储二进制文件)

        2. Buffer的结构和数组很像,操作方法也和数组类似

        3. Buffer不需要引入模块,可直接使用

        4. Buffer中存储的都是二进制数据,但是在显示的时候都是以16进制显示的

            Buffer中的而每一个元素的范围都是从00-ff(16进制,换成十进制为:0-255)的

            因为这是一个字节(8位)的范围

            计算机中:

                8 bit = 1 Byte(字节)

                1024 Byte = 1Kb

                1024 Kb = 1 Mb

                1024 Mb = 1 Gb

                1024 Gb = 1Tb

                1024 Tb = 1Pb

            buffer.length返回的是该buffer在内存中占用的字节长度

            在buffer中,一个英文字符占用内存的一个字节

                    一个中文字占用内存中的三个字节

 

[B] 将字符串转换成Buffer

        示例:

            var buf = Buffer.from("hello word")

 

[C] 创建指定长度的buffer,默认元素为00

        var buf1 = Buffer.alloc(10);        // 创建一个长度为10的Buffer

        【注】Buffer的长度一旦创建就不能再修改

 

[D] 向Buffer中添加数据,

    索引添加值的方法,和数组类似

        buf1[0] = 25;

        Buffer中的每个元素存储范围都是0-255,超出的范围会根据二进制写法,取出后八位保存

        如:

            buf1[0] = 556;      // 该值已超出可以存储的范围

            实际中:

                // 10 0010 1100(556)    保存的时候之u能取到8位

                即

                //    0010 1100(44)     实际保存到的数据为44

   

[E] Buffer数据访问  

    下标索引,显示出来的数据为10进制

        // buf1实际存储:<Buffer 19 5a ca 7d 00 00 00 00 00 00>

        var a = buf1[1];

            // 返回结果为:90(即十进制的5a)

 

[F] buffer中的数据转化成任意进制显示

        buffer中数据默认显示为十进制,可通过.toString()自定义显示数据的进制

        如:

            var a = buf1[1].toString(16);

                // 返回5a

            var a = buf1[1].toString(2);

                // 显示1011010

 

[G] 创建一个指定长度的Buffer,但是Buffer可能含有敏感数据

         var buf1 = Buffer.allocUnsafe(10);

            // 返回的值可能包含有数据,并非全是00

 

[H] Buffer叫做缓冲区

        用户向node服务器请求数据,发送的请求是二进制的,这些请求被保存在缓冲区Buffer中,

        node服务器将数据发送给用户时,发送的数据也是二进制,也要保存在缓冲区Buffer中。

 

posted @ 2021-11-13 16:20  CarreyB  阅读(104)  评论(0编辑  收藏  举报