Skip to content

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 และการแปลงข้อมูล


อ้างอิง