Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Chuyển đổi Buffer thành chuỗi trong Node.js

Trong Node.js, Buffer là lớp xử lý dữ liệu nhị phân thô. Để đọc được, cần chuyển sang chuỗi (string) bằng phương thức toString(encoding). Mã hóa phổ biến nhất là 'utf8' (mặc định).

Cú pháp

buffer.toString([encoding[, start[, end]]])
  • encoding: 'utf8', 'base64', 'hex', 'ascii', 'latin1'...
  • start, end: Vị trí cắt (tùy chọn).

Ví dụ hoàn chỉnh

// Tạo Buffer từ chuỗi 'utf8'
const actualBufferObject = Buffer.from('[John Smith]', 'utf8');

console.log("Đối tượng Buffer gốc:");
console.log(JSON.stringify(actualBufferObject));
// {"type":"Buffer","data":[91,74,111,104,110,32,83,109,105,116,104,93]}

// Chuyển ngược về chuỗi
console.log("Chuỗi gốc:", actualBufferObject.toString('utf8'));
// [John Smith]

// Demo mã ASCII của từng ký tự
const myString = '[John Smith]';
console.log("\nMã ASCII của từng ký tự:");
for (let i = 0; i < myString.length; i++) {
    const char = myString[i];
    const ascii = char.charCodeAt(0);
    console.log(`Ký tự '${char}' (U+${ascii.toString(16).toUpperCase().padStart(4,'0')}) = ${ascii}`);
}

Kết quả chạy (Node.js)

Đối tượng Buffer gốc:
{"type":"Buffer","data":[91,74,111,104,110,32,83,109,105,116,104,93]}
Chuỗi gốc: [John Smith]

Mã ASCII của từng ký tự:
Ký tự '[' (U+005B) = 91
Ký tự 'J' (U+004A) = 74
Ký tự 'o' (U+006F) = 111
Ký tự 'h' (U+0068) = 104
Ký tự 'n' (U+006E) = 110
Ký tự ' ' (U+0020) = 32
Ký tự 'S' (U+0053) = 83
Ký tự 'm' (U+006D) = 109
Ký tự 'i' (U+0069) = 105
Ký tự 't' (U+0074) = 116
Ký tự 'h' (U+0068) = 104
Ký tự ']' (U+005D) = 93

Các cách tạo Buffer thường dùng

Phương thứcMô tả
Buffer.from(string[, encoding])Tạo từ chuỗi (mặc định utf8)
Buffer.from(array)Từ mảng byte (0-255)
Buffer.alloc(size[, fill])Cấp phát an toàn, khởi tạo 0 hoặc fill
Buffer.allocUnsafe(size)Cấp phát nhanh, dữ liệu rác (cần fill)

Chuyển đổi phổ biến

const buf = Buffer.from('Hello World');

// Buffer -> String (UTF-8 mặc định)
buf.toString();           // 'Hello World'
buf.toString('utf8');     // 'Hello World'
buf.toString('base64');   // 'SGVsbG8gV29ybGQ='
buf.toString('hex');      // '48656c6c6f20576f726c64'

// String -> Buffer
Buffer.from('SGVsbG8=', 'base64').toString(); // 'Hello'
Buffer.from('48656c6c6f', 'hex').toString();  // 'Hello'

Lưu ý quan trọng

  • Chỉ có trong Node.js, không có trong trình duyệt (trừ khi dùng polyfill/bundler).
  • Buffer là mảng byte bất biến kích thước (fixed-size) sau khi cấp phát.
  • Luôn chỉ định encoding khi chuyển đổi để tránh bug (mặc định utf8 nhưng nên viết rõ).
  • Với dữ liệu lớn, dùng stream hoặc Buffer.concat() thay vì nối chuỗi.
  • Buffer.from() an toàn hơn new Buffer() (deprecated).

Ứng dụng thực tế

  • Đọc/ghi file nhị phân (fs.readFile trả về Buffer).
  • Xử lý network packet, HTTP body, WebSocket frame.
  • Mã hóa/giải mã (crypto, base64, hash).
  • Xử lý ảnh, video, file nén.