Node.js & TypeScript: Hiểu về Buffer

Node.js & TypeScript: Hiểu về Buffer

Giới thiệu

Trong bài viết này, chúng ta sẽ khám phá Buffer trong Node.js — một khái niệm quan trọng khi làm việc với dữ liệu nhị phân như file, stream, hoặc socket.

Buffer là gì?

Trong Node.js, Buffer dùng để xử lý dữ liệu nhị phân raw. Đây là đối tượng tương tự như mảng byte, hữu ích khi bạn làm việc với dữ liệu không phải chuỗi (string) hoặc không phải JavaScript object.

Ví dụ tạo một Buffer từ chuỗi:

const buffer = Buffer.from('Hello, world!', 'utf-8');
console.log(buffer);
// <Buffer 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21>

Chuyển đổi giữa Buffer và chuỗi

const buffer = Buffer.from('Xin chào!');
console.log(buffer.toString('utf-8')); // "Xin chào!"

Ghi dữ liệu vào Buffer

const buffer = Buffer.alloc(10);
buffer.write('ABC');
console.log(buffer.toString()); // "ABC"
  • Buffer.alloc(size) tạo buffer với kích thước cố định, khởi tạo giá trị bằng 0
  • Buffer.allocUnsafe(size) nhanh hơn nhưng không khởi tạo

Truy cập dữ liệu trong Buffer

const buffer = Buffer.from('ABC');
console.log(buffer[0]); // 65 (mã ASCII của 'A')

Bạn có thể thay đổi từng byte như mảng:

buffer[0] = 66; // thay 'A' bằng 'B'
console.log(buffer.toString()); // "BBC"

Cắt và nối Buffer

const buffer = Buffer.from('Hello, Buffer!');
const slice = buffer.slice(7, 13);
console.log(slice.toString()); // "Buffer"

Ghép nhiều Buffer lại:

const part1 = Buffer.from('Hello, ');
const part2 = Buffer.from('world!');
const full = Buffer.concat([part1, part2]);
console.log(full.toString()); // "Hello, world!"

So sánh Buffer

const a = Buffer.from('ABC');
const b = Buffer.from('ABC');
console.log(a.equals(b)); // true

So sánh thứ tự:

const x = Buffer.from('A');
const y = Buffer.from('B');
console.log(x.compare(y)); // -1 vì A < B

Ứng dụng thực tế

Khi làm việc với hệ thống file, stream, hoặc network (như HTTP hoặc TCP), Node.js sử dụng Buffer để truyền dữ liệu hiệu quả.

Ví dụ đọc file dưới dạng buffer:

import * as fs from 'fs';

fs.readFile('example.txt', (err, data) => {
  if (err) throw err;
  console.log(data); // Là Buffer
  console.log(data.toString()); // Chuyển sang chuỗi
});

Kết luận

  • Buffer là cách hiệu quả để xử lý dữ liệu nhị phân trong Node.js
  • Bạn có thể tạo, cắt, ghép, so sánh, và chuyển đổi buffer sang chuỗi hoặc ngược lại
  • Rất quan trọng khi làm việc với file, stream và socket