gpt4 book ai didi

node.js - 如何比较 NodeJS 中的 Buffer 对象?

转载 作者:IT老高 更新时间:2023-10-28 23:15:03 24 4
gpt4 key购买 nike

我是 Node 新手,开始玩一些 Node 代码。我遇到的问题是如何直接比较NodeJS中的Buffer对象?这里的“直接”意味着不使用 buffer.toString() 方法或迭代整个缓冲区。

这是一个例子:

var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
console.log(buf1===buf2); //result is false
Buffer.compare(buf1,buf2);//lengthy error message

谢谢德里克

更新:我正在使用版本“v0.10.38”,如果我使用 buf1.compare(buf2),以下是消息:

>buf1.compare(buf2)
TypeError: Object abc has no method 'compare'
at repl:1:7
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.emit (events.js:95:17)
at Interface._onLine (readline.js:203:10)
at Interface._line (readline.js:532:8)
at Interface._ttyWrite (readline.js:761:14)
at ReadStream.onkeypress (readline.js:100:10)
at ReadStream.emit (events.js:98:17)
at emitKey (readline.js:1096:12)

最佳答案

根据 nodejs change log ,看起来 .compare().equals() 是在 Node v0.11.13 中添加的。

我找不到明确的 v0.10 文档,所以也许您必须自己编写一个逐字节的比较。

这是一个快速而肮脏的比较函数:

function areBuffersEqual(bufA, bufB) {
var len = bufA.length;
if (len !== bufB.length) {
return false;
}
for (var i = 0; i < len; i++) {
if (bufA.readUInt8(i) !== bufB.readUInt8(i)) {
return false;
}
}
return true;
}

仅供引用,在查看 nodejs 源代码时,较新的 nodejs 版本中内置的 .compare().equals() 会快很多因为他们使用 C 并直接在缓冲区上执行 memcmp(),这将比缓冲区中每个项目的两个方法调用快得多。


您可以在 Node v0.12.2 中使用这些中的任何一个:

var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
buf1.equals(buf2); // returns true
buf1.compare(buf2). // returns 0
Buffer.compare(buf1, buf2); // returns 0

以下是每个选项的更多详细信息:

var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
console.log(buf1.compare(buf2)); // 0 means buffers are the same

如果两个缓冲区相同非零,结果将是0


你也可以使用:

var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
console.log(buf1.equals(buf2)); // true means buffers are the same

获取两个缓冲区是否包含相同字节的 bool 值。


仅供引用,您的原始代码:

var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
Buffer.compare(buf1,buf2);

对我来说很好用。它返回 0 就像 buf1.compare(buf2) 一样。


在 Javascript 中,两个对象的 === 运算符比较两个变量是否指向完全相同的对象,而不是单独的对象是否包含相同的内容。所以,buf1 === buf1,但是 buf1 !== buf2.

关于node.js - 如何比较 NodeJS 中的 Buffer 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30701220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com