버퍼: 일정한 크기로 모아두는 데이터 (한번에 처리)
버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업
import { promises as fs } from 'fs';
fs.readFile('./readme.txt')
.then(data => {
console.log(data); // <Buffer ed 95 98 ec 9d b4>
console.log(data.toString()); // 하이
})
.catch(err => {
throw err;
});
fs.writeFile('./writeme.txt', '내용입니다.')
.then(() => {
return fs.readFile('./writeme.txt');
})
.then(data => {
console.log(data.toString()); // 내용입니다.
})
.catch(err => {
throw err;
});
스트림: 데이터의흐름(버퍼(또는 청크)의 크기를 작게 여러번에 걸쳐 처리)
스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업
import fs from 'fs';
const data = [];
fs.createReadStream('./readme2.txt', { highWaterMark: 64 }) // 기본 64KB(64000byte)씩 처리 => 64byte로 변경
.on('data', chunk => {
data.push(chunk); // 일정 크기로 넘어오는 데이터를 배열에 담아준다.
console.log('data: ', chunk, chunk.length);
})
.on('end', () => {
// 끝나면 실행되는 이벤트리스너
console.log('end: ', Buffer.concat(data).toString());
})
.on('error', err => {
console.log('error: ', err);
});
const writeStream = fs
.createWriteStream('./writeme2.txt')
.on('finish', () => {
console.log('파일 쓰기 완료');
})
.on('error', err => {
console.log('error: ', err);
});
writeStream.write('글을 씁니다.\n'); // 버퍼단위로 나눠 쓰기 (메모리 효율적 사용)
writeStream.write('2222222222222');
writeStream.end();
스트리밍되는 버퍼들을 연결하며 조작가능
import fs from 'fs';
fs.createReadStream('./readme2.txt', { highWaterMark: 64 }).pipe(fs.createWriteStream('./writeme3.txt'));