Dark mode
Buffer Module (บัฟเฟอร์)
ทำไม Buffer ถึงสำคัญ?
Buffer คือพื้นฐานสำคัญของการจัดการข้อมูลไบนารีใน Node.js เช่น ข้อมูลไฟล์ รูปภาพ เสียง หรือข้อมูลที่รับส่งผ่าน network เพราะ JavaScript ปกติไม่มี object สำหรับข้อมูล binary โดยตรง
- ใช้ Buffer อ่าน/เขียนไฟล์ไบนารี เช่น .jpg, .mp3, .zip
- ส่งข้อมูลผ่าน network (TCP/UDP) ต้องใช้ Buffer
- Buffer ทำงานเร็วและประหยัดหน่วยความจำ
- รองรับการแปลงข้อมูลระหว่าง string <-> binary อย่างมีประสิทธิภาพ
แนะนำ Buffer module
Buffer
เป็น built-in class สำหรับจัดการข้อมูลไบนารีใน Node.js เช่น แปลงข้อความเป็น binary, อ่าน/เขียนไฟล์แบบ raw, รับส่งข้อมูลผ่าน network
หมายเหตุ: ตั้งแต่ Node.js 14+ สามารถใช้ ESM (import) ได้เลย
ฟังก์ชันหลักที่ใช้บ่อย (พร้อมตัวอย่าง ESM)
1. Buffer.from(string)
สร้าง Buffer จาก string (หรือ array/object อื่นๆ)
js
const buf = Buffer.from("Hello");
console.log(buf); // <Buffer 48 65 6c 6c 6f>
- 'Hello' จะถูกแปลงเป็น binary ตาม encoding (default: utf-8)
2. buf.toString([encoding])
แปลง Buffer กลับเป็น string
js
const buf = Buffer.from("Cascade!");
console.log(buf.toString()); // Cascade!
- encoding (default: utf-8) สามารถแปลงเป็น base64, hex ได้ด้วย
3. Buffer.alloc(size)
สร้าง Buffer ขนาดตามต้องการ (ค่าเริ่มต้นเป็น 0)
js
const emptyBuf = Buffer.alloc(10);
console.log(emptyBuf); // <Buffer 00 00 00 00 00 00 00 00 00 00>
- เหมาะกับการเตรียม buffer สำหรับข้อมูลขนาดใหญ่
4. Buffer.concat([...buffers])
รวมหลาย Buffer เข้าด้วยกัน
js
const buf1 = Buffer.from("Hi");
const buf2 = Buffer.from("!");
const combined = Buffer.concat([buf1, buf2]);
console.log(combined.toString()); // Hi!
ข้อควรระวัง
- Buffer มีขนาดคงที่ สร้างแล้วแก้ขนาดไม่ได้ (แต่แก้ค่าภายในได้)
- การสร้าง Buffer จาก input ที่ไม่ปลอดภัย (เช่น user input) อาจเสี่ยง security ถ้าใช้ Buffer.allocUnsafe
- การจัดการ encoding ผิดอาจทำให้ข้อมูลเพี้ยน
ตัวอย่างการใช้งานจริง
1. อ่าน/เขียนไฟล์ไบนารี
js
import { readFile, writeFile } from "node:fs/promises";
const buf = await readFile("./image.jpg"); // buf เป็น Buffer
await writeFile("./copy.jpg", buf); // เขียน Buffer กลับเป็นไฟล์
2. รับส่งข้อมูลผ่าน network
js
import net from "node:net";
const server = net.createServer((socket) => {
socket.on("data", (buf) => {
console.log("รับข้อมูล:", buf.toString());
});
});
server.listen(3000);
3. แปลงข้อมูลระหว่าง string <-> binary
js
const base64 = Buffer.from("Cascade!").toString("base64");
console.log(base64); // Q2FzY2FkZSE=
สรุป
Buffer คือเครื่องมือสำคัญสำหรับจัดการข้อมูลไบนารีใน Node.js ถ้าเข้าใจ Buffer จะสามารถอ่าน/เขียนไฟล์และรับส่งข้อมูลได้อย่างมืออาชีพ รองรับทั้งงานไฟล์ งาน network และการแปลงข้อมูล