美文网首页
Node之使用Buffer类处理二进制数据

Node之使用Buffer类处理二进制数据

作者: 27亿光年中的小小尘埃 | 来源:发表于2019-12-26 20:34 被阅读0次

    创建Buffer对象

    调用new Buffer(size),size为缓存区大小

    new Buffer(10)
    

    fill()方法来初始化缓存区中的所有内容

    buf.fill(value, [offset], [end])
    //value:为需要被写入的数值
    //offset:用于指定从第几个字节处开始写入被指定的数值
    //end:用于指定将数值一直写入到第几字节处
    

    直接使用一个数组来初始化缓存区

    new Buffer(array)
    

    在这种形式的构造函数中,使用一个存放了需要被指定数值的数组来作为构造函数的参数。

    直接使用一个字符串来初始化缓存区

    new Buffer(str,[encoding]
    

    在这种形式的构造函数中,使用两个参数,其中第一个参数为必须指定的参数,参数值为用于初始化缓存区的字符串,第二个参数值为一个用于指定文字编码格式的字符串,默认值为“utf8”。

    在Node.js中,可以使用的编码格式如下

    编码 说明
    ascii ASCII字符串
    utf8 UTF-8字符串
    utf16le UTF-16LE字符串
    ucs2 UCS2字符串
    base64 经过BASE64编码后的字符串
    binary 二进制数据(不推荐使用)
    hex 使用十六进制数值表示的字符串

    字符串长度和缓存区的长度

    在Node.js中,一个字符串的长度与根据该字符串所创建的缓存区的长度并不相同。因为在计算字符串的长度时,以文字作为一个单位,而在计算缓存区的长度时,以字节作为一个单位。

    Buffer对象的slice方法与该数据共享内存区域,如果修改使用slice方法取出的数据,则缓存区中保存的数据也将被修改。

    Buffer对象的toString方法

    可以使用Buffer对象的toString方法将Buffer对象中保存的数据转换为字符串

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

    在Buffer对象的toString方法中,可以使用三个可选参数,其中第一个参数用于指定Buffer对象中保存的文字编码格式,默认参数值为utf8。第二及第三个参数用于指定被转换数据的起始位置与终止位置,以字节为单位。toString方法返回经
    过转换后的字符串。

    Buffer对象的write方法

    如果要将字符串当作二进制数据来使用,只需将该字符串作为Buffer类的构造函数的参数来创建Buffer对象即可。但是有时我们需要向已经创建的Buffer对象中写入字符串,这时可以使用该Buffer对象的write方法

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

    在Buffer对象的write方法中,可以使用四个参数,其中第一个参数为必须指定参数,后三个参数为可选参数。第一个参数用于指定需要写入的字符串,第二个参数offset与第三个参数length用于指定字符串转换为字节数据后的写入位置。字节数据的书写位置为从第1+offset个字节开始到offset+length个字节为止(例如offset为3,length为6,写入位置为从第4字节开始到第9字节为止,包括第4字节与第9字节)。第四个参数用于指定写入字符串时使用的编码格式,默认为utf8格
    式。

    StringDecoder对象

    在使用StringDecoder对象时,首先需要加载Node.js中的string_decoder模块

    var StringDecoder = require('string_decoder').StringDecoder;
    

    在加载了string_decoder模块之后,可以创建一个StringDecoder对象,在StringDecoder类的构造函数中,可以使用一个可选参数,该参数用于指定转换字符串时所使用的编码格式,默认参数值为utf8。

    var decoder = new StringDecoder([encoding]);
    

    要将Buffer对象中的数据转换为字符串时,可以使用StringDecoder对象的write方法

    decoder.write(buffer)
    

    Buffer对象与JSON对象之间的相互转换

    在Node.js中,可以使用JSON.stringify方法将Buffer对象中保存的数据转换为一个字符串,也可以使用JSON.parse方法将一个经过转换后的字符串还原为一个数组。

    复制缓存数据

    当需要将Buffer对象中保存的二进制数据复制到另一个Buffer对象中时,可以使用Buffer对象的copy方法,copy方法的使用方法如下所示。

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

    在Buffer对象的copy方法中,使用四个参数,其中第一个参数为必须指定的参数,其余三个参数均为可选参数。第一个参数用于指定复制的目标Buffer对象。第二个参数用于指定目标Buffer对象中从第几个字节开始写入数据,参数值为一个小
    于目标Buffer对象长度的整数值,默认值为0(从开始处写入数据)。第三个参数用于指定从复制源Buffer对象中获取数据时的开始位置,默认值为0,即从复制源Buffer对象中的第一个字节开始获取数据,第四个参数用于指定从复制源Buffer对象中获取数据时的结束位置,默认值为复制源Buffer对象的长度,即一直获取完毕复制源Buffer对象中的所有剩余数据。

    isBuffer方法用于判断一个对象是否为一个Buffer对象

    Buffer.isBuffer(obj)
    

    byteLength方法计算一个指定字符串的字节数

    Buffer.byteLength(string, [encoding])
    

    在byteLength方法中,使用两个参数,其中第一个参数为必须输入参数,用于指定需要计算字节数的字符串,第二个参数为可选参数,用于指定按什么编码方式来计算字节数,默认值为utf8。

    concat方法用于将几个Buffer对象结合创建为一个新的Buffer对象

    Buffer.concat(list,[totalLength])
    

    在concat方法中,使用两个参数,其中第一个参数为必须指定的参数,参数值为一个存放了多个Buffer对象的数组,concat方法将把其中的所有Buffer对象联结创建为一个Buffer对象;第二个参数为可选参数,用于指定被创建的Buffer对象的总长度,当省略该参数时,被创建的Buffer对象为第一个参数数组中所有Buffer对象的长度的合计值。

    isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串

    Buffer.isEncoding(encoding)
    

    相关文章

      网友评论

          本文标题:Node之使用Buffer类处理二进制数据

          本文链接:https://www.haomeiwen.com/subject/xsiloctx.html