더북(TheBook)

먼저 createReadStream으로 읽기 스트림을 만듭니다. 첫 번째 인수로 읽을 파일 경로를 넣습니다. 두 번째 인수는 옵션 객체인데 highWaterMark라는 옵션이 버퍼의 크기(바이트 단위)를 정할 수 있는 옵션입니다. 기본값은 64KB이지만, 여러 번 나눠서 보내는 모습을 보여주기 위해 16B로 낮췄습니다.

readStream은 이벤트 리스너를 붙여서 사용합니다. 보통 data, end, error 이벤트를 사용합니다. 위 예제의 readStream.on('data')와 같이 이벤트 리스너를 붙이면 됩니다. 파일을 읽는 도중 에러가 발생하면 error 이벤트가 호출되고, 파일 읽기가 시작되어 데이터(chunk)가 들어올 때마다 data 이벤트가 발생합니다. 16B씩 읽도록 설정했으므로 파일의 크기가 16B보다 크다면 여러 번 발생할 수도 있습니다. 파일을 다 읽으면 end 이벤트가 발생합니다.

예제에서는 미리 data 배열을 만들어놓고 들어오는 chunk들을 하나씩 push한 뒤 마지막에 Buffer.concat()으로 합쳐서 다시 문자열을 만들었습니다.

파일의 크기가 99B라 무려 일곱 번에 걸쳐 데이터를 전송했습니다. 하지만 기본값으로는 64KB씩 전송하므로 대부분의 txt 파일들은 한 번에 전송됩니다.