Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발공부일지

NodeJS - 진수 / Buffer(내장모듈) / writeStream 본문

NodeJS

NodeJS - 진수 / Buffer(내장모듈) / writeStream

보람- 2023. 8. 29. 16:07

목차

1. 진수

2. Buffer

3. Fs class로 작성해보기

4. writeStream

5.event


 

 

 

1. 진수

 

- 컴퓨터 공학에서 사용하는 2진수, 16진수, 그리고 사람이 사용하는 10진수

 

- 컴퓨터는 0과 1로만 구성되어 있어서 2진수를 사용한다. (바이너리)

- 1 bit는 2가지 데이터를 저장할수있다. (0하고 1)

- 1 byte 256가지를 저장할수있다. (2^8)

 

- bit와 byte는 가짓수로 몇개를 저장할수있는지를 표현한다.

- 1 byte = 8 bit

- '12' 라는 숫자를 컴퓨터는 '1100' 으로 저장한다.

 

- bit를 4개로 늘려서 0000~1111 4bit는 16가지수 0~15의 데이터를 표현한다. (2^4)

- 0,1,2,....,9까지는 아라비아 숫자를 나타내는데 10자리부터는 알파벳을 넣어 표현한다.

  → 10(a) 11(b) 12(c) 13(d) 14(e) 15(f)

        16진수

 

- 1byte를  8bit로 늘려서 00000000 일때 8개중 4개씩 묶어서 nibble이라고 한다.

    그래서 2개의 nibble이 구성된것이 byte!

- nibble = 4bit

- 4 nibble = 16bit

- 8bit = 1 byte

- 16bit = 2 byte

 

※ `01100001`
a → 97(10진수) → 0110 0001 (2진수)→ 61 (16진수)

 

 

 

 

 

2. Buffer

 

- 일정크기로 모아두는 데이터로 데이터를 1byte씩 저장한다.

https://nodejs.org/dist/latest-v18.x/docs/api/buffer.html

 

const buffer = Buffer.from("보람");
console.log(buffer);
console.log(buffer.length);

buffer의 size는 바이트를 의미한다.

const arr = [Buffer.from("Hello"), Buffer.from("World")];
console.log(arr);

const concat = Buffer.concat(arr);
console.log(concat);
console.log(concat.toString());

// const alloc = Buffer.alloc(5);
// console.log(alloc);
// 5 byte 로 00 00 00 00 00

 

 

 

Buffer 쪼개기

const fs = require("fs");
const readStream = fs.createReadStream("./test.md", { highWaterMark: 16 });

const data = [];
readStream.on("data", (buffer) => {
  data.push(buffer);
  console.log(buffer);
});

readStream.on("end", () => {
  console.log(Buffer.concat(data).toString());
  console.log("다 읽었습니다!");
});

 

 

 

3. Fs class로 작성해보기

// 003.js 파일

const fs = require("fs");

class Fs {
  readFile(path, callback) {
    // console.log("hello world!");
    const readStream = fs.createReadStream(path, { highWaterMark: 8 });
    const data = [];
    readStream.on("data", (buffer) => {
      data.push(buffer);
      console.log("buffer 읽는중...");
    });

    readStream.on("end", () => {
      callback(null, Buffer.concat(data));
    });
    readStream.on("error", (error) => {
      callback(error, null);
    });
  }
}

module.exports = new Fs();
const fs = require("./003");
// console.dir(fs);

fs.readFile("./test.md", (err, data) => {
  if (err) throw err;
  console.log(data);
});

- on 이벤트에 data, end, error라는 이벤트이름으로 구현되어있는것이다!

 

 

 

 

4. writeStream

https://nodejs.org/dist/latest-v18.x/docs/api/stream.html

const fs = require("fs");
const writeStream = fs.createWriteStream("./README2.md");

writeStream.on("finish", () => {
  console.log("end");
});

writeStream.write("#파일만들기");
writeStream.write("## 중분류");
writeStream.write("### 만들어보기");
writeStream.write("<br />");
writeStream.write("Hello world~?");
writeStream.end();

 

 

 

 

5. event

https://nodejs.org/dist/latest-v18.x/docs/api/events.html

- 공부해서 다시 작성하기!

더보기
const EventEmitter = require("events");
// 내장모듈

const myEvent = new EventEmitter();

myEvent.addListener("event1", () => {
  console.log("event1");
});

myEvent.on("event2", () => {
  console.log("event2");
});

myEvent.once("event3", () => {
  console.log("event3");
});

myEvent.emit("event1");
myEvent.emit("event2");
myEvent.emit("event2");
myEvent.emit("event3");
myEvent.emit("event3");
class Event {
  observers = [];

  constructor() {}

  on(eventName, callback) {
    const obj = {
      //  [eventName]: callback
      key: eventName,
      value: callback,
    };
    this.observers.push(obj);
  }

  emit(eventName, obj) {
    // let observer;
    //
    // for (let i = 0; i < this.observers.length; i++) {
    //   if (this.observers[i].key === eventName) {
    //     observer = this.observers[i];
    //   }
    // }

    const observer = this.observers.find((v) => v.key === eventName);
    // console.log(observer); // {}
    // console.log(observer.value);
    observer.value(obj);
  }
}

const ev = new Event();

ev.on("click", (a) => {
  console.log(a);
  console.log("hello world");
});

ev.emit("click", { name: "boram" });

// console.log(ev.observers);

 


※ 문자집합 참고하기

https://nuli.navercorp.com/community/article/1079940

 

※ 구조 

- NodeJS
       - global
               - 내장객체
                         - console.log
                         - process
                         - __dirname
                         - __filenamd
                         - Buffer
        - 내장모듈
               - fs
               - path

https://github.com/ingoo-blockchain/lecture/tree/main/Nodejs/fileSystem/source

 

 

※ node.js 에서 A = 65 라고 알려주는게 buffer(16진수로)

    - buffer는 데이터를 가짓수를 줄일수있는 16진수로 담은것

       - 2진수는 8자리, 16진수는 2자리

A = 65

※ addEventListener 구조와 같아!!

myEvent.addListener("event1", () => {
  console.log("event1");
});

 

코드를 보고 유추해낼수있을 정도로 훈련하기!!!!!!