TIL/Node JS
버퍼, 스트리밍 (2)
by koreashowme
2019. 10. 20.
const fs = require('fs');
const readStream = fs.createReadStream('./readme.txt , { highWaterMark: 1}');
// ./readme.txt 읽는다.
// highWaterMark :16 => 16 바이트 식으로 읽을 것이 다.
// 16바이트 버퍼를 채우면 읽고, 그 다음 16바이트를 또 읽고, 스트리밍 흘러가는 방식.
const data = [ ];
readStream.on('data', (chunk) => { //16바이트씩 오는 것을 chunk(버퍼들)라고 부른다.
data.push(chunk);
console.log('data', chunk, chunk.length);
})
// 스트림은 => 이벤트 기반으로 동작한다. data, end, error.
// 버퍼(chunk)들이 들어올 때마다 => data 이벤트가 발생한다.
readStream.on('end', () => {
console.log('end', Buffer.concat(data).toString());
})
// Buffer => global 안에 있는 객체.
// concat => 하나로 합친다.
// toString => 버퍼를 사람이 읽을 수 있도록 문자로 만들어준다.
readStream.on('error', (err) => {
console.log('error', err);
})
// 스트림은 버퍼의 흐름이기 때문에 여러 개의 스트림을 이어 버퍼가 흘러가게 할 수 있다.
// pipe
const fs = require('fs');
const readStream = fs.createReadStream('readme4.txt');
const writeStream = fs.createWriteStream('writeme3.txt');
readStream.pipe(writeStream); // 복사 기능이라고 생각하면 됨. pipe 연결 계속 가능.
copyFile 을 사용해도 된다.
const readStream = fs.copyFile('./readme4', './writeme4.txt', (err) => {
console.log(err);
})
const zlib = require('zlib'); //파일을 압축하는 모듈
const zlibStream = zlib.createGzip();
const readStream = fs.createReadStream('readme4.txt');
const writeStream = fs.createWriteStream('writeme5.txt');
readStream.pipe(zlibStream).pipe(writeStream); // 파일을 압축해서 사용.
comment