메모리와 시간 효율적인 방법으로 파일에서 UTF-8 텍스트를 읽으려고합니다. 노드의 ReadStream에서 동기식으로 읽는 방법
fs.readSync
파일에서 바이트의 일련의 금액을 읽고 반환됩니다
fs.readFileSync
전체 파일을 읽고 파일의 전체 내용을 포함하는 버퍼를 반환합니다 : 동 기적으로 파일에서 직접 읽을 수있는 두 가지 방법이 있습니다 그것은 쉬운 때문에 버퍼를 포함하는 바로 그 내용이
나는 처음에 단지 fs.readFileSync
을 사용하지만 효율적으로 한 번에 텍스트의 덩어리로 읽어 잠재적으로 큰 파일을 처리 할 수 있도록하고 싶습니다. 그래서 대신 fs.readSync
을 사용하기 시작했습니다. 그런데 fs.readSync
은 UTF-8 디코딩을 처리하지 않는다는 것을 깨달았습니다. UTF-8은 간단하므로 일부 논리를 수동으로 디코딩 할 수는 있지만 Node에는 이미 서비스가 있으므로 가능한 경우이를 피하고 싶습니다.
fs.createReadStream
이 정확히 목적으로 사용할 수있는 ReadStream
을 반환하지만 불행히도 비동기 작업 모드에서만 사용할 수있는 것처럼 보입니다.
동기식으로 ReadStream
에서 읽을 방법이 있습니까? 나는 이미이 스택 위에 막대한 스택을 가지고 있으며, 비동기 적이기 위해 리팩토링 할 필요가 없다.
스트림이 비동기입니다. 그건 바꿀 수 없어요. 물론 스트림에서 파일 핸들을 가져 와서'readSync()'와 동 기적으로 읽을 수는 있지만 스트림 인터페이스를 전혀 사용하지 않고 이미 시도한 것보다 좋지는 않습니다. – jfriend00
필자는 인코딩과'readSync()'문제는 파일에서 임의의 바이트를 읽는 것이 멀티 바이트 문자의 정렬을 알 수 없으므로 UTF- 8 인코딩. 반면에 스트림이나'fs.readFileSync()'는 파일의 시작부터 시작하여 정렬을 보장 할 수 있습니다. – jfriend00
네, 이것이 정확하게 문제입니다. 기본적으로 파일에서 개별적으로 디코딩 된 문자를 읽을 수있는 방법을 찾고 있지만 동기식입니다. 앞서 말했듯이'readSync'를 통해 직접 디코딩 로직을 구현할 수 있습니다.이 작업은 Node의 상자에서 이미 가능하다면 궁금합니다. – jchitel