在Buffer(Node.js)内容上执行.replace()?
这是一个相当新的问题,但我还没有通过Google / SO / Etcfind任何可靠的答案。
如果您的缓冲区中有内容,那么在该内容上运行.replace()
的最佳模式是什么?
你只需用.toString()
取出内容,运行replace()
,然后把它放回Buffer? 或者,还有更好的方法?
谢谢
取决于你想要replace什么, Buffers
不会自己重新分配它们,你在JavaScript中使用的Buffer
对象只是一个到外部存储器区域的“指针”(我在这里专门讲述Node.js 3.x, 2.x中的旧“SlowBuffers”以不同的方式工作)。
所以有两种可能的情况:
-
您的replace值的长度是
<>
被replace的值。 在这种情况下,你可以做的事情不多,你需要使用toString()
来分配一个新的String
(提示:slow),然后根据该string的大小创build一个新的Buffer
。 -
你只是交换字节(
[]
上的缓冲区不是一个字符索引)在这里它会快得多的速度会更快2.x只是使用一个纯循环,并执行replace你的自我,因为几乎没有分配开销(节点分配一个新的int值与写入的值相同),但是3.xtoString
在99%的时间内没有问题。
但是你真正想要注意的是,你不要写巨大的string,因为在2.x下它真的很慢。
由于V8可以随时移动内存中的string,因此Node 2.x需要在将指针传递给操作系统之前将其复制出来。 这已经修复了一些V8在3.x中的黑客。