• JS服务端技术—Node.js知识点锦集


    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
    https://blog.csdn.net/m0_69908381/article/details/134544523
    出自【进步*于辰的博客

    接触Node.js挺长时间了,工作也经常使用,只是接口开发更倾向于业务的梳理,对基础要求反而不高。就是,参考前辈的代码写路由,工作重心在接口代码。
    基础不牢固,不仅影响工作效率,而且不利于个人发展,所以近期开始恶补JS服务端技术的基础,就从Node.js开始。

    1、关于 Buffer

    详述可查阅博文【02-Node.js—Buffer(缓冲器)】(转发)。
    参考笔记三,P49.1。

    Buffer是一种类似数组的对象,用于表示固定长度的字节序列,其本质是一段内存空间,且空间由 c + + \color{green}{c++} c++申请,每个元素占一个字节。

    创建: \color{brown}{创建:} 创建:

    1. Buffer.alloc(size):创建长度为 size 的字节序列;
    2. buffer.allocUnsafe(size):同上,区别是在分配内存时不会清除旧数据(指曾使用过仍保留数据、但目前未使用的内存空间);
    3. Buffer.from(xx):xx 可以是数组、字符串或 Buffer。

    说明: \color{red}{说明:} 说明:
    1、由于每个元素占一个字节,故alloc(size)allocUnsafe(size)创建的字节序列共包含 size 个字节。
    示例:

    var buf = Buffer.alloc(10)
    // 打印buf:
    
    • 1
    • 2

    规定以16进制的格式进行显示,00(16进制)是0000 0000(二进制),共10个元素。

    2from(xx)创建的字节序列所占字节数由 xx 决定。
    示例1。(xx是数组)

    var arr = [2, 0, 2, 3]
    var buf = Buffer.from(arr)
    // 打印buf:
    
    • 1
    • 2
    • 3

    数字占一个字节,故长度为4
    2(数字,十进制)是02(16进制)。

    示例2.。(xx是字符串)

    var buf = Buffer.from('2023')
    // 打印buf:
    
    • 1
    • 2

    为何buf[0]32?因为此时的2不是数字,而是字符。
    '2' A S C L L 码 \color{blue}{ASCLL码} ASCLL50,转换成16进制就是32

    示例3。(xx是字符串)

    var buf = Buffer.from('汉字')
    // 打印buf:
    
    • 1
    • 2

    是不是有点懵?因为Buffer采用utf-8编码,一个汉字占3个字节,故用三个元素表示一个汉字。
    再改一下。

    var buf = Buffer.from('汉字')
    buf[0] = 97 + 25// 'z'的ASCLL码
    buf[1] = 97 + 7
    buf[2] = 97 + 8
    console.log(buf.toString())// 打印:zhi字
    
    • 1
    • 2
    • 3
    • 4
    • 5

    toString()会将每个元素都转换成对应的字符,这样是不是一目了然了。
    再补充一点。

    var buf = Buffer.from('汉字')
    buf[0] = 97 + 25 + 256// ------------------A
    buf[1] = 97 + 7
    buf[2] = 97 + 8
    console.log(buf.toString())// 打印:zhi字
    
    • 1
    • 2
    • 3
    • 4
    • 5

    97 + 25'z' A S C L L 码 ASCLL码 ASCLL,再+ 256已经不是'z',为何最后还是'z'
    因为Buffer规定,一个字符占一个字节。换言之,只会用一个字节来表示字符,如果字符对应的 A S C L L 码 ASCLL码 ASCLL超出一个字节(8位)的表示范围(255),超出的部分会被丢弃。
    256对应的二进制是1 00000000,即需要两个字节,则第一个字节舍去,剩下0000 0000,为0(十进制)。

    示例4。(xx 是Buffer

    var buf1 = Buffer.from([2, 0, 2, 3])
    var buf2 = Buffer.from(buf1)
    // 打印buf:
    
    • 1
    • 2
    • 3

    与示例1相同。

    留言

    本人的核心语言是Java,故有时倾向于以Java的思想进行阐述,这可能会给向前端发展的博友们的阅读带来不适。并且,由于本文相当于是我系统学习Node.js的笔记,也基于我的Java功底,所以有些阐述不会那么详细。
    不过,Java作为一种强类型的编程语言,我的阐述会很严谨,所以需要大家在阅读时多一点耐心。


    本文持续更新中。。。

  • 相关阅读:
    阿里云产品试用系列-负载均衡 SLB
    虚机的部分磁盘空间被谁吃了?
    freeswitch如何判断挂机方
    C //例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
    Sentinel流控规则可以这样玩?
    1.2 异步相关概念:深入了解
    Linux - 札记 - W10: Warning: Changing a readonly file
    大屏可视化!2022新趋势!
    ElasticSearch语句中must,must_not,should组合关系,作者有验证脚本(ES为8版本,使用Kibana运行语句)
    html(抽奖设计)
  • 原文地址:https://blog.csdn.net/m0_69908381/article/details/134544523