首页 > 编程语言 >无涯教程-Node.js - Buffers

无涯教程-Node.js - Buffers

时间:2024-01-21 10:32:54浏览次数:23  
标签:Node noAssert false 无涯 偏移量 默认 缓冲区 buf Buffers

纯JavaScript是Unicode友好的,但是对于二进制数据却不是,在处理TCP流或文件系统时,必须处理八位位组流,Node提供了Buffer类,该类提供了实例来存储类似于整数数组的原始数据,但对应于V8堆外部的原始内存分配。

缓冲区类是全局类,可以在应用程序中访问而无需导入缓冲区模块。

创建缓冲区

节点缓冲区可以通过多种方式构造。

以下是创建 10 个八位字节的未初始化缓冲区的语法-

var buf=new Buffer(10);

以下是从给定数组创建Buffer的语法-

var buf=new Buffer([10, 20, 30, 40, 50]);

以下是从给定的字符串和可选的编码类型创建Buffer的语法-

var buf=new Buffer("Simply Easy Learning", "utf-8");

尽管" utf8"是默认编码,但是您可以使用以下任何一种编码:" ascii"," utf8"," utf16le"," ucs2"," base64"或" hex"。

写入缓冲区

以下是写入节点缓冲区的方法的语法-

buf.write(string[, offset][, length][, encoding])
  • string         -  这是要写入缓冲区的字符串数据。

  • offset         -  这是开始写入缓冲区的索引,默认值为0。

  • length        -  这是要写入的字节数,默认为buffer.length。

  • encoding  -  要使用的编码。 " utf8"是默认编码。

返回值

此方法返回写入的八位位组数。如果缓冲区中没有足够的空间来容纳整个字符串,则它将写入字符串的一部分。

buf=new Buffer(256);
len=buf.write("Simply Easy Learning");

console.log("Octets written : "+  len);

执行以上程序后,将产生以下输出-

Octets written : 20

从缓冲区读取

以下是从节点缓冲区读取数据的方法的语法-

buf.toString([encoding][, start][, end])
  • encoding  -  要使用的编码, " utf8"是默认编码。

  • start          -  开始读取的开始索引,默认为0。

  • end           -  结束读取的索引,默认为完整缓冲区。

返回值

此方法从使用指定字符集编码编码的缓冲区数据中解码并返回字符串。

buf=new Buffer(26);
for (var i=0 ; i < 26 ; i++) {
  buf[i]=i + 97;
}

console.log( buf.toString('ascii'));       //outputs: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5));   //outputs: abcde
console.log( buf.toString('utf8',0,5));    //outputs: abcde
console.log( buf.toString(undefined,0,5)); //encoding defaults to 'utf8', outputs abcde

执行以上程序后,将产生以下输出-

abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

换为JSON

以下是将节点缓冲区转换为JSON对象的方法的语法-

buf.toJSON()

返回值

此方法返回Buffer实例的JSON表示形式。

var buf=new Buffer('Simply Easy Learning');
var json=buf.toJSON(buf);

console.log(json);

执行以上程序后,将产生以下输出-

{ type: 'Buffer',
   data: 
   [ 
      83,
      105,
      109,
      112,
      108,
      121,
      32,
      69,
      97,
      115,
      121,
      32,
      76,
      101,
      97,
      114,
      110,
      105,
      110,
      103 
   ]
}

串联缓冲区

以下是将节点缓冲区连接到单个节点缓冲区的方法的语法-

Buffer.concat(list[, totalLength])
  • list                  - 要连接的Buffer对象的数组列表。 

  • totalLength  - 这是连接时缓冲区的总长度。

返回值

此方法返回一个Buffer实例。

var buffer1=new Buffer('LearnFk ');
var buffer2=new Buffer('Simply Easy Learning');
var buffer3=Buffer.concat([buffer1,buffer2]);

console.log("buffer3 content: " + buffer3.toString());

执行以上程序后,将产生以下输出-

buffer3 content: LearnFk Simply Easy Learning

比较缓冲区

以下是比较两个节点缓冲区的方法的语法-

buf.compare(otherBuffer);
  • 进行比较的缓冲区

返回值

返回一个数字,该数字指示它按排序顺序在otherBuffer之前还是之后或与otherBuffer相同。

var buffer1=new Buffer('ABC');
var buffer2=new Buffer('ABCD');
var result=buffer1.compare(buffer2);

if(result < 0) {
   console.log(buffer1 +" comes before " + buffer2);
} else if(result === 0) {
   console.log(buffer1 +" is same as " + buffer2);
} else {
   console.log(buffer1 +" comes after " + buffer2);
}

执行以上程序后,将产生以下输出-

ABC comes before ABCD

复制缓冲区

以下是复制节点缓冲区的方法的语法-

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
  • targetBuffer  - 将在其中复制缓冲区的缓冲区对象。

  • targetStart    - 数字,可选,默认值:0

  • sourceStart   - 数字,可选,默认值:0

  • sourceEnd    - 数字,可选,默认值:buffer.length

返回值

没有返回值。即使目标存储区与源重叠,也将数据从此缓冲区的区域复制到目标缓冲区中的区域,如果未定义,则targetStart和sourceStart参数默认为0,而sourceEnd默认为buffer.length。

var buffer1=new Buffer('ABC');

//copy a buffer
var buffer2=new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

执行以上程序后,将产生以下输出-

buffer2 content: ABC

切片缓冲区

以下是获取节点缓冲区的子缓冲区的方法的语法-

buf.slice([start][, end])
  • start    -  数字,可选,默认值:0

  • end      -  数字,可选,默认值:buffer.length

返回值

返回一个新缓冲区,该缓冲区引用与旧缓冲区相同的内存,但偏移量由开始(默认为0)和结束(默认为buffer.length)索引进行切片,负索引从缓冲区的末尾开始。

var buffer1=new Buffer('LearnFk');

//切片缓冲区
var buffer2=buffer1.slice(0,9);
console.log("buffer2 content: " + buffer2.toString());

执行以上程序后,将产生以下输出-

buffer2 content: Learnfk

缓冲长度

以下是获取以字节为单位的节点缓冲区大小的方法的语法-

buf.length;

返回值

返回缓冲区的大小(以字节为单位)。

var buffer=new Buffer('LearnFk');

//缓冲区长度
console.log("buffer length: " + buffer.length);

执行上述程序时,将产生以下输出-

buffer length: 7
以下是Node.js中可用的Buffers模块的参考。 有关更多详细信息,请参阅官方文档。Sr.No. Method & 描述 1

新缓冲区(大小)

分配一个新的大小八位字节的缓冲区。请注意,大小不得超过kMaxLength。否则,将在此处引发RangeError。

2

新缓冲区(缓冲区)

将传递的缓冲区数据复制到新的Buffer实例上。

3

新缓冲区(str [,编码])

分配一个包含给定str的新缓冲区。编码默认为" utf8"。

4

buf.length

返回缓冲区的大小(以字节为单位)。注意,这不一定是内容的大小。 length是指为缓冲区对象分配的内存量。更改缓冲区的内容时不会更改。

5

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

使用给定的编码将字符串以偏移量写入缓冲区。 offset默认为0,编码默认为'utf8'。 length是要写入的字节数。返回写入的八位字节数。

6

buf.writeUIntLE(值,偏移量,byteLength [,noAssert])

在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。

7

buf.writeUIntBE(值,偏移量,byteLength [,noAssert])

在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。

8

buf.writeIntLE(值,偏移量,byteLength [,noAssert])

在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。

9

buf.writeIntBE(值,偏移量,byteLength [,noAssert])

在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。

10

buf.readUIntLE(offset,byteLength [,noAssert])

所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

11

buf.readUIntBE(offset,byteLength [,noAssert])

所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

12

buf.readIntLE(offset,byteLength [,noAssert])

所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

13

buf.readIntBE(offset,byteLength [,noAssert])

所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

14

buf.toString([encoding] [,开始] [,结束])

从使用指定字符集编码编码的缓冲区数据中解码并返回字符串。

15

buf.toJSON()

返回Buffer实例的JSON表示形式。当对Buffer实例进行字符串化时,JSON.stringify隐式调用此函数。

16

buf [index]

获取并设置索引的八位位组。该值指的是单个字节,因此合法范围在0x00和0xFF hex之间或0和255之间。

17

buf.equals(otherBuffer)

如果此缓冲区和otherBuffer具有相同的字节,则返回一个布尔值。

18

buf.compare(otherBuffer)

返回一个数字,该数字指示此缓冲区是在排序顺序之前还是在otherBuffer之前或之后。

19

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

即使目标存储区与源重叠,也将数据从此缓冲区的区域复制到目标缓冲区中的区域。如果未定义,则targetStart和sourceStart参数默认为0,而sourceEnd默认为buffer.length。

20

buf.slice([开始] [,结束])

返回一个新缓冲区,该缓冲区引用与旧缓冲区相同的内存,但是由开始(默认为0)和结束(默认为buffer.length)索引偏移和裁剪。负索引从缓冲区的末尾开始。

21

buf.readUInt8(offset [,noAssert])

从缓冲区以指定的偏移量读取一个无符号的8位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

22

buf.readUInt16LE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取一个无符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

23

buf.readUInt16BE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取一个无符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

24

buf.readUInt32LE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取一个无符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

25

buf.readUInt32BE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取一个无符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

26

buf.readInt8(offset [,noAssert])

从缓冲区以指定的偏移量读取带符号的8位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

27

buf.readInt16LE(offset [,noAssert])

以指定的字节序格式从缓冲区读取带符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

28

buf.readInt16BE(offset [,noAssert])

以指定的字节序格式从缓冲区读取带符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

29

buf.readInt32LE(offset [,noAssert])

使用指定的字节序格式从缓冲区中读取一个带符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

30

buf.readInt32BE(offset [,noAssert])

使用指定的字节序格式从缓冲区中读取一个带符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

31

buf.readFloatLE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取32位浮点数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

32

buf.readFloatBE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取32位浮点数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

33

buf.readDoubleLE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取64位double值。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

34

buf.readDoubleBE(offset [,noAssert])

使用指定的字节序格式从缓冲区读取64位double值。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。

35

buf.writeUInt8(value,offset [,noAssert])

将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号8位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

36

buf.writeUInt16LE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定正确性,否则不应使用它。默认为false。

37

buf.writeUInt16BE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

38

buf.writeUInt32LE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

39

buf.writeUInt32BE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

40

buf.writeInt8(值,偏移量[,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的8位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

41

buf.writeInt16LE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

42

buf.writeInt16BE(值,偏移量[,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

43

buf.writeInt32LE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

44

buf.writeInt32BE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定正确性,否则不应使用它。默认为false。

45

buf.writeFloatLE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的32位浮点数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

46

buf.writeFloatBE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的32位浮点数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

47

buf.writeDoubleLE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的64位double。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

48

buf.writeDoubleBE(value,offset [,noAssert])

使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的64位double。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。

49

buf.fill(value [,offset] [,end])

用指定的值填充缓冲区。如果没有给出偏移量(默认为0)和结束符(默认为buffer.length),它将填充整个缓冲区。

缓冲类方法

Sr.No. Method & 描述 1

Buffer.isEncoding(encoding)

如果编码是有效的编码参数,则返回true,否则返回false。

2

Buffer.isBuffer(obj)

判断obj是否为Buffer。

3

Buffer.byteLength(string [,encoding])

给出字符串的实际字节长度,编码默认为" utf8"。

4

Buffer.concat(list [,totalLength])

返回一个缓冲区,该缓冲区是将列表中的所有缓冲区连接在一起的输出。

5

Buffer.compare(buf1,buf2)

与buf1.compare(buf2)相同。对排序缓冲区数组很有用。

参考链接

https://www.learnfk.com/nodejs/nodejs-buffers.html

标签:Node,noAssert,false,无涯,偏移量,默认,缓冲区,buf,Buffers
From: https://blog.51cto.com/u_14033984/9353566

相关文章

  • 无涯教程-Node.js - Streams
    Stream流是使您可以连续地从源读取数据或将数据写入目标的对象,在Node.js中,有四种类型的流-Readable  - 用于读取操作的流。Writable   - 用于写操作的流。Duplex    - 可用于读取和写入操作的流。Transform -一种双工流,其中基于输入来计算输出......
  • node-red__function_1
               ......
  • 无涯教程-MATLAB - Octave
    GNUOctave是像MATLAB这样的高级编程语言,它与MATLAB大部分兼容。它也用于数值计算。Octave与MATLAB具有以下共同特征-矩阵是基本数据类型它具有对复数的内置支持它具有内置的数学函数和库它支持用户定义的函数GNUOctave也是可免费重新发行的软件,您可以根据自由软件基金会......
  • 无涯教程-MATLAB - 变换(Transforms)
    MATLAB提供了用于处理变换的命令,例如Laplace和Fourier变换,转换在科学和工程中用作简化分析并从另一个角度查看数据的工具。例如,傅立叶变换允许我们将表示为时间函数的信号转换为频率函数,拉普拉斯变换使我们能够将微分方程转换为代数方程。MATLAB提供了laplace,傅立叶和fft命......
  • 无涯教程-MATLAB - 多项式(Polynomials)
    MATLAB将多项式表示为行向量,其中包含按降序排序的系数。例如,方程P(x)=x4+7x3-5x+9可以表示为-p=[170-59];判断多项式polyval函数用于以指定值判断多项式。例如,要判断我们先前的多项式p,在x=4处,键入-p=[170-59];polyval(p,4)MATLAB执行上述语句并返......
  • 无涯教程-MATLAB - 代数(Algebra)
    到目前为止,我们已经看到所有示例都可以在MATLAB及其GNU(也称为Octave)中运行,但是对于求解基本的代数方程,MATLAB和Octave几乎没有什么不同,因此我们将尝试在单独的部分中介绍MATLAB和Octave。我们还将讨论代数表达式的分解和简化。MATLAB中代数方程solve函数用于求解代数方程,......
  • 无涯教程-MATLAB - 微积分(Calculus)
    MATLAB提供了多种方法来解决微分和积分问题,求解任意程度的微分方程式以及计算极限,最重要的是,您可以轻松求解复杂函数的图,并通过求解原始函数及其导数来检查图上的最大值,最小值。本章将讨论微积分的问题,在本章中,我们将讨论预演算的概念,即计算函数的极限并验证极限的性质。计算极......
  • 无涯教程-MATLAB - 绘图(Plotting)
    要绘制函数图,您需要执行以下步骤-通过为变量x指定值的范围定义x,为此函数绘制定义函数y=f(x)以plot(x,y)以下示例将演示该概念。让我们用简单的函数y=x绘制x的值范围(从0到100),增量为5。创建一个脚本文件并输入以下代码-x=[0:5:100];y=x;plot(x,y)运行文件时,MAT......
  • 无涯教程-MATLAB - 数据输出
    MATLAB中的数据导出意味着写入文件,MATLAB允许您在另一个读取ASCII文件的应用程序中使用数据,为此,MATLAB提供了几种数据导出选项。有两种方法可以将数字数组导出为定界的ASCII数据文件-使用save函数并指定-ascii限定符使用dlmwrite函数使用保存函数的语法是-savemy_data.......
  • 无涯教程-MATLAB - 字符串(Strings)
    在MATLAB中创建字符串非常简单,实际上,我们已经使用了很多次。例如,您在命令提示符下键入以下内容-my_string='LearnfkPoint'MATLAB将执行上述语句并返回以下输出-my_string=LearnfkPointMATLAB将所有变量视为数组,而字符串则视为字符数组,让我们使用whos命令检查上面创建的变......