앞선 아티클에서 버퍼에 대해서 살펴보고, 버퍼의 취약점과 이를 보강하기 위한 스트림 개념을 살펴보았습니다.
const fs = require('fs');
const readStream = fs.createReadStream('./readme3.txt', { highWaterMark: 16});
const data = [];
readStream.on('data', (chunk) => {
data.push(chunk);
console.log('data : ', chunk, chunk.length);
});
readStream.on('end', () => {
console.log('end : ', Buffer.concat(data).toString());
});
readStream.on('error', (err) => {
console.log('error :', err);
});
/* 출력
data : <Buffer ec 9d b4 20 ed 8c 8c ec 9d bc ec 9d 80 20 eb 82> 16
data : <Buffer 98 eb 88 a0 ec 84 9c 20 ec a0 84 eb 8b ac eb 90> 16
data : <Buffer 9c eb 8b a4 2e 20 63 68 75 6e 6b 20 ec a1 b0 ea> 16
data : <Buffer b0 81 20 eb 8b a8 ec 9c 84 eb a1 9c 20 eb 82 98> 16
data : <Buffer eb 88 84 ec 96 b4 ec a7 84 eb 8b a4 2e> 13
end : 이 파일은 나눠서 전달된다. chunk 조각 단위로 나누어진다.
*/
· createReadStream( )의 첫 번째 인수는 읽을 파일의 경로입니다. 두 번째 인수는 옵션 객체로, highWaterMark 옵션으로 버퍼의 크기를 바이트 단위로 정합니다. 기본 값은 64KB이며, 여기서는 이해를 돕기 위해 16B로 지정했습니다.
· 이렇게 생성한 readStream 변수에서 이벤트 리스너를 붙여 사용합니다. 여기서 사용되는 이벤트는 'data', 'end', 'error'입니다. 여기서 'data'는 "파일 읽기가 시작되면 발생하는" 이벤트입니다. 파일을 모두 읽으면 end 이벤트가 발생하죠.
· 예제 코드는 만들어둔 data 배열에 생성되는 chunk들을 한 개씩 push 합니다. 그리고 마지막에 해당 배열에서 concat을 이용해 버퍼를 하나로 합치고 이를 다시 문자열로 변환했습니다.
· 해당 파일 크기는 77B여서 16B 네 번, 13B 한 번이 전송되었습니다.
다음 아티클에서는 쓰기 스트림을 알아보겠습니다.
'Programming > Node.js' 카테고리의 다른 글
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 5 (0) | 2024.05.28 |
---|---|
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 4 (0) | 2024.05.24 |
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 2 (0) | 2024.05.21 |
4. Node 기능 살펴보기 (7) - 버퍼와 스트림 1 (0) | 2024.05.20 |
4. Node 기능 살펴보기 (6) - 동기 / 비동기 메서드 3 (0) | 2024.05.17 |