node.js—替换缓冲区中内容的最佳方法

node.js—替换缓冲区中内容的最佳方法,node.js,buffer,Node.js,Buffer,我正在将文件读取到缓冲区,如下所示: var myfile=fs.readFileSync(myfile.txt); 在myfilebuffer中,将某个字符串替换为另一个字符串的正确方法是什么?我希望将其保留为缓冲区,因为它比将其保留为字符串快。不幸的是,缓冲区处理原始二进制数据。它不提供与字符串相关的函数性 据我所知,在搜索和替换其中的字符串之前,必须先将其转换为字符串(toString()method) 如果知道搜索字符串的索引,可以将索引前后的缓冲区内容复制到新的缓冲区中,并连接替换的

我正在将文件读取到缓冲区,如下所示:

var myfile=fs.readFileSync(myfile.txt);

myfile
buffer中,将某个字符串替换为另一个字符串的正确方法是什么?我希望将其保留为缓冲区,因为它比将其保留为字符串快。

不幸的是,缓冲区处理原始二进制数据。它不提供与字符串相关的函数性

据我所知,在搜索和替换其中的字符串之前,必须先将其转换为字符串(
toString()
method)

如果知道搜索字符串的索引,可以将索引前后的缓冲区内容复制到新的缓冲区中,并连接替换的内容。 但在这种情况下,您将遇到编码问题


缓冲区文档:

如果将
abcdef
替换为
ghi
会发生什么。这会在缓冲区中留下一个洞,因为缓冲区无法调整大小。您至少可以在缓冲区中搜索字符串,并创建另一个输出缓冲区来替换字符串(可能需要中间缓冲区)


JavaScript的字符串替换以这种方式有效地处理字符串。如果您仍然想使用缓冲区,可以查看。它有
indexOf
函数,用于搜索缓冲区中的字符串
replace
是您必须自己实现的功能。

包缓冲区replace替换缓冲区中的内容,如函数replace for String。

好吧。。。这有点烦人,因为将缓冲区切换为字符串并返回会占用太多资源,特别是当缓冲区很大时。从位置0开始并在buffer.length-chunk.length结束读取缓冲区,其中chunk大小与搜索字符串的大小相同,然后逐字节替换,不是更好吗?尤其是当字符串被找到并且我们只做了一次替换时,它不是更快吗?我猜你们使用的是缓冲区,因为你们的数据是流式传输的。在这种情况下,我建议您一部分一部分地处理它,并使用user568109提到的buffertools,并按照您所说的“制造漏洞”,这并没有问题。不过,或许你可以提供更多关于你的案例的细节,并获得更准确的建议。看看这个:与Node.js
Buffer相关。replace
功能请求:(2016)True。但这与我无关。与其重写缓冲区,不如在缓冲区中留下一个洞。@FlashThunder如果你想用
abcdef
替换
ghi
该怎么办?好吧,在我的情况下,我想替换的东西是由我定义的。。。所以我可以做我需要的任何时间。当然,你是对的。唯一的办法似乎是制作一个巨大的缓冲区并完全重写它。似乎仍然比字符串化更快。@FlashThunder我怀疑您使用缓冲区会获得更快的结果。只有当您必须读/写大量数据时,缓冲区才会更快,比如处理二进制数据的套接字。对于此类操作,管柱得到了更好的优化。您应该将数据存储为字符串而不是缓冲区。请看这个问题:。在我的例子中,这样的缓冲区大于2MB