我是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
Run Code Online (Sandbox Code Playgroud)
谢谢德里克
更新:我使用的是版本"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)
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 19
每对的NodeJS更改日志,它看起来像.compare()
和.equals()
在节点v0.11.13加入.
我没有可以找到的明确的v0.10 doc,所以也许你必须自己写一个字节比较.
这是一个快速而肮脏的比较功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,在查看nodejs源代码时,内置.compare()
或.equals()
更新的nodejs版本将更快,因为它们转到C并memcmp()
直接在缓冲区上执行,这将比每个方法调用快得多缓冲区中的项目.
您可以在节点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
Run Code Online (Sandbox Code Playgroud)
以下是每个选项的更多详细信息:
var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
console.log(buf1.compare(buf2)); // 0 means buffers are the same
Run Code Online (Sandbox Code Playgroud)
结果将是0
两个缓冲区相同时非零,否则.
您还可以使用:
var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
console.log(buf1.equals(buf2)); // true means buffers are the same
Run Code Online (Sandbox Code Playgroud)
获取布尔值,以确定两个缓冲区是否包含相同的字节.
仅供参考,您的原始代码为:
var buf1 = new Buffer("abc");
var buf2 = new Buffer("abc");
Buffer.compare(buf1,buf2);
Run Code Online (Sandbox Code Playgroud)
对我来说工作得很好.它返回0
就像buf1.compare(buf2)
.
在Javascript中===
,两个对象的运算符进行比较,以查看两个变量是否指向完全相同的对象,而不是单独的对象是否包含相同的内容.所以buf1 === buf1
,但是buf1 !== buf2
.
归档时间: |
|
查看次数: |
12026 次 |
最近记录: |