2013-08-19 2 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 first (toString() 메서드)로 변환해야합니다.

검색된 문자열의 색인을 알고있는 경우 색인 전후의 버퍼 내용을 새 버퍼로 복사하고 바꾼 내용을 연결할 수 있습니다. 그러나이 경우, 당신은 인코딩 문제가 발생할 수 있습니다 ...

버퍼 문서 : 'ABCDEF' 'GHI'로 교체 할 경우 어떤 일이 일어날 것이라고 http://nodejs.org/api/buffer.html#buffer_class_buffer

+0

글쎄 ... 이것은 성가신 일입니다. 왜냐하면 전환 버퍼 문자열과 백에 걸리는 작업은 특히 버퍼가 클 때 많은 리소스를 소모합니다. chunk-position 0에서 시작하여 buffer.length - chunk.length로 끝나는 버퍼를 읽는 것이 더 좋지 않은가? 여기서 청크 크기는 검색된 문자열의 크기와 같고 바이트 단위로 바꾼다. 문자열이 발견되어 교체 할 때 특히 더 빠르지 않습니까? –

+0

데이터가 스트리밍되어 버퍼를 사용하고있는 것 같습니다. 이 경우 부분적으로 처리하고 bugertools를 user568109로 사용하고 문제가 없다고 말하면서 "구멍 만들기"를 제안합니다. 그러나 당신은 당신의 사건에 대한 더 자세한 정보를 제공하고보다 정확한 제안을 얻을 수 있습니다. – Feugy

0

. 버퍼 크기를 조정할 수 없으므로 버퍼에 구멍이 생깁니다. 최소한 문자열에서 Buffer를 검색하고 문자열을 대체하는 다른 출력 버퍼를 만듭니다 (중간 버퍼가 필요할 수도 있음).

JavaScript의 문자열 replace는 이러한 방식으로 문자열을 효율적으로 처리합니다. 그래도 버퍼를 사용하려면 buffertools을 살펴볼 수 있습니다. 그것은 문자열을위한 버퍼를 검색하는 indexOf 함수를 가지고 있습니다. replace은 직접 구현해야하는 항목입니다.

+0

참. 그러나 그것은 저를 걱정하지 않습니다. 다시 작성하는 것보다 버퍼에 구멍을 두는 것이 좋습니다. –

+0

@FlashThunder 그리고'ghi'가'abcdef'로 대체되기를 원한다면? – user568109

+0

글쎄, 내 경우 엔, 내가 대체하고 싶은 것들은 나에 의해 정의된다. 그래서 나는 내가 필요로하는 한 그것을 만들 수있다. 물론, 당신 말이 맞습니다. 유일한 방법은 거대한 버퍼를 만들고 완전히 다시 작성하는 것 같습니다. 아직도 stringifing보다 빠르다. –