개발공부일지
NodeJS - 진수 / Buffer(내장모듈) / writeStream 본문
목차
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);
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자리
※ addEventListener 구조와 같아!!
myEvent.addListener("event1", () => {
console.log("event1");
});
※ 코드를 보고 유추해낼수있을 정도로 훈련하기!!!!!!
'NodeJS' 카테고리의 다른 글
NodeJS - Response Message class문법으로 만들기 (0) | 2023.09.07 |
---|---|
NodeJS - net 모듈을 사용해서 TCP 구현 (0) | 2023.08.31 |
NodeJS - network, OSI 7계층, host, 프로토콜, port (0) | 2023.08.30 |
NodeJS - 내장 모듈, fs, path, readFile, writeFile / 외장 모듈, NPM, dotenv (0) | 2023.08.28 |
NodeJS - 기초 (0) | 2023.08.25 |