2013-08-19 135 views
2

內容我正在讀文件到緩衝器的最佳方式,如:的node.js - 替換緩衝

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

什麼是更換一些字符串到另一個myfile緩衝區的正確方法?我想保留它作爲緩衝區,因爲它比將它保持爲字符串更快。

+0

看看這個:http://blog.strongloop.com/practical-examples-of-the-new-node-js-streams-api/ –

回答

0

不幸的是,一個緩衝區處理原始二進制數據。它不提供字符串相關的功能。

據我所知,在搜索和替換字符串之前,您必須先將它轉換爲String(toString()方法)。

如果您知道搜索到的字符串的索引,可以將索引前後的緩衝區內容複製到新緩衝區中,並連接替換的內容。 但在這種情況下,你會遇到的問題編碼...

緩衝DOC:http://nodejs.org/api/buffer.html#buffer_class_buffer

+0

那麼......這是一種惱人的事情,因爲切換緩衝區字符串和背部佔用太多資源,特別是當緩衝區很大時。塊讀取從位置0開始到緩衝區結束緩衝區是不是更好 - chunk.length其中塊大小與搜索字符串的大小相同,然後逐字節替換?不會更快,尤其是當字符串會被發現,我們只做一次替換? –

+0

我猜你正在使用緩衝區,因爲你的數據是流式傳輸的。在這種情況下,我建議你逐個處理它,並使用buffertools作爲user568109提及和「打洞」,因爲你說它沒有問題。但是,您可以提供更多關於您的案例的細節,並獲得更準確的建議。 – Feugy

0

如果「ABCDEF」被「GHI」代替會發生什麼。它會在緩衝區留下一個空洞,因爲緩衝區不能調整大小。你至少可以在Buffer中搜索字符串,並創建另一個輸出Buffer來替換字符串(可能需要中間緩衝區)。

JavaScript的字符串replace以這種方式有效地處理字符串。如果你仍然想使用緩衝區,你可以看看buffertools。它具有indexOf函數,用於搜索Buffer的字符串。 replace是你必須自己實現的東西。

+0

是的。但那並不關心我。在緩衝區留下一個洞比重寫它更好。 –

+0

@FlashThunder如果你想把'ghi'替換爲'abcdef'呢? – user568109

+0

好吧,就我而言,我想要替換的東西是由我定義的...所以我可以根據需要製作它。但當然,你是對的。唯一的辦法似乎是製作一個巨大的緩衝區並完全重寫。仍然似乎比絃樂更快。 –