nodejs>>Buffer

本文深入探讨了Node.js中Buffer类在处理二进制数据时的应用,包括创建、转换编码和拼接操作。重点介绍了不同编码方式如ascii、utf8、utf16le、ucs2、base64、binary和hex,并提供了实际示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*纯 JavaScript 对 Unicode 友好但是无法很好地处理二进制数据。当我们面对类似 TCP 流或文件系统时,是需要处理八位流的。Node 有几种操作、创建以及消费八位流的策略。*/
    /*原始数据保存在 Buffer 类的实例中。一个 Buffer 实例类似于一个整数数组,但对应者 V8 堆之外的一个原始内存分配区域。一个 Buffer 的大小不可变。*/
    /*Buffer 类是一个全局的类,所以它很罕有地不需要require语句就可以调用*/
    /*在Buffers和JavaScript string转换时,需要明确的一个编码方法。下面是一些不同的string编码*/
    /*'ascii' - 仅适用 7 bit ASCII 格式数据。这个编码方式非常快速,而且会剥离设置过高的bit。*/
    /*'utf8' - 多字节编码 Unicode字符。很多网页或者其他文档的编码格式都是使用 UTF-8的。*/
    /*'utf16le' - 2 或者 4 字节, Little Endian (LE) 编码Unicode字符。代理对 (U+10000 to U+10FFFF) 是支持的.
    (BE和LE表示大端和小端,Little-Endian就是低位字节排放在内存的低地址端,
    高位字节排放在内存的高地址端;Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端;下同)*/
    /*'ucs2' - 'utf16le'的别名.*/
    /*'base64' - Base64 字符串编码*/
    /*'binary' - 一个将原始2进制数据编码为字符串的方法,仅使用每个字符的前8bits。 这个编码方式已经被弃用而且应该被避免,
    尽可能的使用Buffer对象。这个编码方式将会在未来的Node版本中移除。*/
    /*'hex' - 把每个byte编码成2个十六进制字符*/

    //类 
    Buffer
    //Buffer 类是一个全局变量类型,用来直接处理2进制数据的。 它能够使用多种方式构建。

    new Buffer(size);
    //创建一个新的buffer, 大小是size的8位字节
    //在申请固定字节的空间时,在大小小于8kb的时候,最好声明8的倍数,因为Buffer空间的自动回收是按照8byte的来回收的,参见<a target=_blank href="http://snoopyxdy.blog.163.com/blog/static/601174402013230102139585/">buffer.concat引出的bug</a>

    new Buffer(array);
    //创建一个buffer, 大小为array数字的8位字节

    new Buffer(str, encoding);
    //创建一个buffer, str为包含的字符串, encoding为编码方式,默认为'utf8'

    //类方法
    Buffer.isEncoding(encoding);
    //来测试encoding的编码是否有效,有效返回true,无效返回false

    //类方法
    Buffer.isBuffer(obj);
    //判断对象obj是否是一个Buffer,是返回true,不是返回false

    //类方法
    Buffer.byteLength(string, encooding);
    //求编码方式为encoding的字符串string的真实长度,当在写HTTP响应头Content-Length的时候,要用Buffer.byteLength,不要用String.prototype.length

    //类方法
    Buffer.concat(list, totalLength);
    //将Buffer数字list中的所有Buffer对象拼接在一起,组成新的Buffer对象,第二个参数是list中Buffer的总长度

    Buffer.length();
    //求Buffer的byte大小,注意这里不是长度

    Buffer.write(string, offset, length, encoding);
    //string要写入的字符串, offset偏移量,可选, length长度,可选, encoding编码方式,默认utf8,可选
    buf = new Buffer(256);
    len = buf.write('\u00bd + \u00bc = \u00be', 0);
    console.log(len + " bytes: " + buf.toString('utf8', 0, len));

    Buffer.toString(encoding, start, end)
    //三个参数都可选,end默认为length, 将Buffer解码为string


推荐:buffer.concat引出的bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值