Đối tượng ArrayBuffer đại diện cho một bộ đệm nhị phân (binary buffer) có độ dài cố định. Phương thức slice() tạo và trả về một ArrayBuffer mới chứa bản sao của một phần dữ liệu từ buffer gốc.
Cú pháp
arrayBuffer.slice(begin[, end])
begin: Vị trí bắt đầu (bao gồm), mặc định 0. Chỉ số âm tính từ cuối.end: Vị trí kết thúc (không bao gồm), mặc địnhbyteLength. Chỉ số âm tính từ cuối.- Trả về:
ArrayBuffermới chứa dữ liệu đã sao chép
Ví dụ cơ bản
const buffer = new ArrayBuffer(16);
const view = new Int32Array(buffer);
view[1] = 102; // Vị trí byte 4-7
const sliced = buffer.slice(4, 12); // Lấy byte 4-11 (8 byte = 2 Int32)
const slicedView = new Int32Array(sliced);
console.log(slicedView[0]); // 102
console.log(slicedView[1]); // 0
Đặc điểm quan trọng
- Tạo bản sao (copy), không chia sẻ bộ nhớ với buffer gốc
- Thay đổi buffer mới không ảnh hưởng buffer gốc và ngược lại
- Hỗ trợ chỉ số âm (tương tự
Array.slice()) - Nếu
endbỏ qua hoặc vượt quá độ dài, cắt đến cuối buffer
So sánh với TypedArray.subarray()
| Đặc điểm | ArrayBuffer.slice() | TypedArray.subarray() |
|---|---|---|
| Trả về | ArrayBuffer mới (copy) | TypedArray mới (view cùng bộ nhớ) |
| Bộ nhớ | Độc lập | Chia sẻ |
| Hiệu năng | Chậm hơn (cấp phát + copy) | Nhanh (chỉ tạo view) |
Khi nào dùng slice()?
- Cần tách một phần dữ liệu để truyền đi, lưu trữ độc lập
- Cần thay đổi dữ liệu cắt ra mà không ảnh hưởng gốc
- Xử lý protocol mạng, định dạng file nhị phân