파일시스템 접근(노드 내장모듈 fs)

이재홍·2022년 4월 13일
0

버퍼와 스트림

버퍼: 일정한 크기로 모아두는 데이터 (한번에 처리)
버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업

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();

pipe

스트리밍되는 버퍼들을 연결하며 조작가능

import fs from 'fs';

fs.createReadStream('./readme2.txt', { highWaterMark: 64 }).pipe(fs.createWriteStream('./writeme3.txt'));

0개의 댓글