본문 바로가기
Do it Node.js/EJS BackEnd

6. 버퍼, 스트림, 파이프

by 갱생angel 2024. 2. 28.

버퍼 : 임시 데이터를 저장하는 메모리 공간, 버퍼가 가득차면 데이터 전달

  -크기가 고정되어 있고 이진값으로 저장

스트림 : 한 곳에서 다른 곳으로 데이터를 전송, 데이터의 흐름을 가리킴

  -리더블(Readable) 스트림 : 데이터를 읽기 위한 스트림

  -라이더블(Writable) 스트림 : 데이터를 쓰기 위한 스트림

파이프 : 2개의 스트림을 1개로 연결

 

ch03 - <readable.js> : readMe.txt 파일을 스트림으로 읽어 옴

createReadStream(경로, 내용[, 옵션]) : 리더블 스트림을 사용하는 함수

※옵션

  -fd : 파일을 여는 작업을 허락, 기본값은 null

  -autoClose : 읽기가 끝난 후 파일을 자동으로 닫을 지 지정, 기본값은 true

  -start : 파일을 어디서부터 읽을 지 지정, 기본값은 0

  -end : 파일을 어디까지 읽을 지 지정, 기본값은 infinity

  -flags('r'), encoding(null), mode('0o666')

※이벤트

  -data : 데이터를 읽을 수 있을 떄마다 발생

  -end : 스트림에서 데이터를 모두 읽었을 떄 발생

  -error : 스트림에서 오류가 생겼을 떄 발새

.on() : 이벤트를 처리할 때 사용하는 함수

const fs = require("fs"); //fs 모듈을 가져옴

const readStream = fs.createReadStream("./readMe.txt"); //리더블 스트림 함수 사용

readStream.on("data", (chunk) => { //data 이벤트로 스트림 데이터 가져옴
  console.log("new chunk receive");
  console.log(chunk);
});
readStream.on("end", () => { //end 이벤트로 스트림 데이터를 모두 가져오면 발생
  console.log("finished reading data");
});
readStream.on("error", (err) => { //에러가 발생했을 시
  console.log(err);
});
>> node readable

버퍼를 4번으로 나눠서 스트림

 

ch03 - <writable.js> : readMe.txt 파일을 읽어와 writeMe.txt 파일에 새로 씀

createWriteStream(경로, 내용[, 옵션]) : 라이더블 스트림을 사용하는 함수

※옵션

  -flags('w'), encoding(null), mode('0o666'), fd(null), autoClose(true), start(0)

.write() : 데이터를 쓰는 함수

const fs = require("fs");

const readStream = fs.createReadStream("./readMe.txt");
const writeStream = fs.createWriteStream("./writeMe.txt"); //라이더블 스트림 함수 사용

readStream.on("data", (chunk) => {
  console.log("new chunk recieve");
  writeStream.write(chunk); //데이터 작성
});
>> node writable


ch03 - <pipe.js> : readMe.txt 파일을 읽어와 writePipe.txt 파일에 새로 씀

※pipe() : 리더블 스트림과 라이더블 스트림을 1개로 연결하는 파이프 함수

  -이벤트 처리를 하지 않아도 됨

  -write 함수를 사용하지 않아도 됨

const fs = require("fs");

const readStream = fs.createReadStream("./readMe.txt");
const writeStream = fs.createWriteStream("./writePipe.txt");

readStream.pipe(writeStream); //데이터를 읽어온 뒤, 새로 작성
>> node pipe

'Do it Node.js > EJS BackEnd' 카테고리의 다른 글

8. 라우팅  (0) 2024.03.01
7. HTTP 모듈  (0) 2024.02.29
5. fs 모듈  (0) 2024.02.27
4. path 모듈  (0) 2024.02.25
3. 모듈 시스템  (0) 2024.02.24