Buffer(버퍼를 직접 다룰 수 있는 클래스) 클래스의 메서드 종류
-
from(문자열): 문자열을 버퍼로 바꿀 수 있다.
-
toString(버퍼): 버퍼를 다시 문자열로 바꿀 수 있다.
-
concat(배열): 배열 안에 든 버퍼들을 하나로 합칩니다.
-
alloc(바이트): 빈 버퍼를 생성
※ readFile()방식의 버퍼가 편리하기는 하지만 문제점 존재한다.
문제점: 용량이 100MB인 파일을 읽을 때 100MB의 버퍼를 만들어야 된다.(너무 많은 메모리를 잡아먹음)
또한 모든 내용을 버퍼에 다 쓴후에 다음 동작으로 넘어가므로 읽기, 압축, 쓰기 등의 조작을 연달아 할 때 매번 전체 용량을 버퍼로 처리해야 다음 단계로 넘어갈 수 있다.
스트림: 버퍼의 크기를 작게 만들어 여러 번에 나눠서 보내는 방식
예시)
const fs = require('fs');
const readStream = fs.createReadStrem('./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);
});
- 16B씩 나눠서(나눠진 조각을 chunk라고 부름) 전송.
쓰기 스트림
예시)
const fs = request('fs');
const writeStream = fs.createWriteStream('./writeme2.txt');
writeStream.on('finish', () => {
console.log('파일 쓰기 완료');
});
writeStream.write('이 글을 씁니다.\n');
writeStream.write('한 번 더 씁니다.');
writestream.end();
결과:
파일 쓰기 완료
- finish 이벤트를 보내주어 파일 쓰기가 종료되면 콜백 함수가 호출된다.
createReadStream으로 파일을 읽고 스트림으로 전달받아 createWritestream으로 파일을 쓸 수 있다.
- '파이핑한다'
예시)
//파일명: pipe.js
const fs = require('fs');
const readStream = fs.createReadStream('readme4.txt');
const writestream = fs. createWriteStream('writeme3.txt');
readStream.pipe(writeStream);
//새로 나온 방식
const zlib = require('zlib');
const fs = require('fs');
const readStream = fs.createReadStream('./readme4.txt');
const zlibStream = zlib.createGzip();
const writeStream = fs.createWriteStream('./readme4.txt.gz');
readStream.pipe(zlibStream).pipe(writeStream);
- 파일을 읽은 후 gzip 방식으로 압축하는 코드, 버퍼 데이터가 전달되다가 gzip 압축을 거친 후 파일로 쓰여진다.
'Javascript > Node.js' 카테고리의 다른 글
이벤트 이해하기 (0) | 2019.10.19 |
---|---|
요청과 응답 이해하기(서버구현) (0) | 2019.10.19 |
파일 시스템 접근하기 (0) | 2019.10.10 |
모듈 만들기 (0) | 2019.10.10 |
Front end Javascript (0) | 2019.10.04 |
댓글