Node.js - Buffer.copy() 方法



NodeJS Buffer.copy() 方法会将源缓冲区对象的内容复制到目标缓冲区中。即使两个缓冲区之间存在内存重叠,也会复制内容。

语法

以下是 NodeJs copy() 方法的语法 -


 buf.copy( target, targetStart, sourceStart, sourceEnd )

参数

  • buffer.copy() 方法有四个参数。第一个参数目标是必需的,其余参数是可选的。
  • target −这是一个必需的参数。它是源缓冲区对象将复制到的目标缓冲区对象。
  • targetStart −它是指要从中开始写入的目标缓冲区内的偏移量。默认情况下为 0。
  • sourceStart −它是指要开始复制的源缓冲区内的偏移量。默认情况下为 0。
  • sourceEnd −它是指源缓冲区内要停止复制的偏移量。默认值为源缓冲区的长度。

返回值

buffer.copy() 方法返回复制的字节数。

使用 NodeJS buffer.copy() 方法将内容从一个缓冲区复制到另一个缓冲区。


var buffer1 = Buffer.from('testing');
var buffer2 = Buffer.from('HELLO');
buffer2.copy(buffer1);
console.log("After copying the string in buffer1 is "+ buffer1.toString());

输出

在此示例中,我们将 buffer2 内的字符串 HELLO 复制到 buffer1。当您打印 buffer1 的内容时,您将获得以下输出 -

After copying the string in buf1 is HELLOng

在此示例中,将在复制时使用 targetStart 参数。


var buffer1 = Buffer.from('testing');
var buffer2 = Buffer.from('HELLO');
buffer2.copy(buffer1, 3);
console.log("After copying the string in buffer1 is "+ buffer1.toString());

输出

在上面的示例中,我们使用 targetStart 作为 3。因此,在 buffer1 中,字符串正在测试,因此从偏移量 3 到字符串的末尾,buffer2 中的内容将被复制。

After copying the string in buffer1 is tesHELL

在此示例中,将使用 targetStart 和 sourceStart 使用 buffer.copy() 复制内容


var buffer1 = Buffer.from('testing');
var buffer2 = Buffer.from('HELLO');
buffer2.copy(buffer1, 2, 2);
console.log("After copying the string in buffer1 is "+ buffer1.toString());

输出

在上面的示例中,我们使用 targetStart 作为 2。因此,在 buffer1 中,字符串正在测试,因此从偏移量 2 到字符串的末尾,buffer2 中的内容将被复制。我们使用了 sourceStart,所以 buffer2 中的字符串是 HELLO,要复制的内容将从偏移量 2 开始,即 LLO 将是将复制到 buffer1 的内容。

After copying the string in buffer1 is teLLOng

现在让我们使用 Buffer.copy() 方法附带的所有参数。


var buffer1 = Buffer.from('testing');
var buffer2 = Buffer.from('HELLO');
buffer2.copy(buffer1, 2, 0, 3);
console.log("After copying the string in buffer1 is "+ buffer1.toString());

输出

在上面的示例中,我们使用了 tartgetStart、sourceStart 和 sourceEnd 参数。因此,将从源缓冲区中选取的字符串是 HEL,相同的字符串将从偏移量 2 复制到 buffer1。

After copying the string in buffer1 is teHELng

在此示例中,将使用 Buffer.allocUnsafe() 方法创建一个缓冲区,然后使用 Unicode 值向其添加字符。


var buffer1 = Buffer.allocUnsafe(10);
var buffer2 = Buffer.from('HELLO');
for (let i = 0; i < 10; i++) {
	 	
	 	//109 is for character m, it will increment and n,o,p..will get added.
	 	buffer1[i] = i + 109;
}
	 	
console.log("The string in buffer1 is "+buffer1.toString()); 		
buffer2.copy(buffer1, 2); 	 	 	
console.log("The string in buffer1 is "+buffer1.toString());

输出

我们使用 Buffer.allocUnsafe() 在 buffer1 中分配了 10 个字节。稍后,我们使用 for 循环从 0 到 10 进行循环,并向 buffer1 添加字符。buffer2 的内容从 buffer1 中 2 开始的偏移量复制到 buffer1 内部。

当您执行上述代码时,输出如下所示 -

The string in buffer1 is mnopqrstuv
The string in buffer1 is mnHELLOtuv

当您尝试在参数 targetStart 和 sourceStart 中使用小于零的值时,它将抛出错误。

让我们看一个例子,当我们使用 targetStart 和 sourceStart 小于零时。


var buffer1 = Buffer.from('testing');
var buffer2 = Buffer.from('HELLO');
buffer2.copy(buffer1, -1, -1, 3);
console.log("After copying the string in buffer1 is "+ buffer1.toString());

输出

对于上述示例,您将收到一个错误,因为我们使用 targetStart 和 sourceStart 作为 -1。默认值为 0,小于 0 将抛出并出错,如下面的输出所示

RangeError: Index out of range