Collections
Uint8Array
Uint8Array của Node.js (set, subarray, fill) so với []uint8 của Go, &[u8] của Rust, [UInt8] của Swift và byte[] của Java.
- Phiên bản tối thiểu
- Node.js ≥ 12.20Go ≥ 1.0Rust ≥ 1.58Swift ≥ 4.0Java ≥ 25
- Đã chạy thử trên
- Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1
Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.
Uint8Array trong Node.js là một TypedArray chỉ chứa số nguyên 8-bit không dấu, có sẵn method set/subarray/fill. Go không có kiểu riêng cho việc này — bạn dùng thẳng []uint8 (giống hệt []byte, vì byte chỉ là bí danh của uint8) và các thao tác slice/loop thông thường của ngôn ngữ. Rust cũng vậy, dùng Vec<u8>/&[u8] cùng method có sẵn trên slice (copy_from_slice, fill). Swift dùng [UInt8] (value type). Java thì khác hẳn: byte luôn có dấu (-128..127), không có kiểu 8-bit không dấu, và mảng nguyên gốc (byte[]) không có "view" nhẹ như subarray/slice — Arrays.copyOfRange luôn tạo bản sao.
Khởi tạo, ghi và lấy subarray
const array = new Uint8Array(10)
console.log(array) // Uint8Array(10) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
const offset = 1
array.set([1, 2, 3], offset)
console.log(array) // Uint8Array(10) [0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
const sub = array.subarray(2)
console.log(sub) // Uint8Array(8) [2, 3, 0, 0, 0, 0, 0, 0]
const sub2 = array.subarray(2, 4)
console.log(sub2) // Uint8Array(2) [2, 3]package main
import "fmt"
func main() {
array := make([]uint8, 10)
fmt.Println(array) // [0 0 0 0 0 0 0 0 0 0]
offset := 1
copy(array[offset:], []uint8{1, 2, 3})
fmt.Println(array) // [0 1 2 3 0 0 0 0 0 0]
sub := array[2:]
fmt.Println(sub) // [2 3 0 0 0 0 0 0]
sub2 := array[2:4]
fmt.Println(sub2) // [2 3]
}fn main() {
let mut array = vec![0u8; 10];
println!("{array:?}"); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let offset = 1;
array[offset..offset + 3].copy_from_slice(&[1, 2, 3]);
println!("{array:?}"); // [0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
let sub = &array[2..];
println!("{sub:?}"); // [2, 3, 0, 0, 0, 0, 0, 0]
let sub2 = &array[2..4];
println!("{sub2:?}"); // [2, 3]
}var array = [UInt8](repeating: 0, count: 10)
print(array) // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let offset = 1
array.replaceSubrange(offset..<offset + 3, with: [1, 2, 3])
print(array) // [0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
let sub = array[2...]
print(Array(sub)) // [2, 3, 0, 0, 0, 0, 0, 0]
let sub2 = array[2..<4]
print(Array(sub2)) // [2, 3]void main() {
byte[] array = new byte[10];
IO.println(Arrays.toString(array)); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
int offset = 1;
System.arraycopy(new byte[]{1, 2, 3}, 0, array, offset, 3);
IO.println(Arrays.toString(array)); // [0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
byte[] sub = Arrays.copyOfRange(array, 2, array.length); // luôn là bản sao, không phải view
IO.println(Arrays.toString(sub)); // [2, 3, 0, 0, 0, 0, 0, 0]
byte[] sub2 = Arrays.copyOfRange(array, 2, 4);
IO.println(Arrays.toString(sub2)); // [2, 3]
}Fill và độ dài (byteLength)
const value = 9
const start = 5
const end = 10
array.fill(value, start, end)
console.log(array) // Uint8Array(10) [0, 1, 2, 3, 0, 9, 9, 9, 9, 9]
console.log(array.byteLength) // 10value := uint8(9)
start := 5
end := 10
for i := start; i < end; i++ {
array[i] = value
}
fmt.Println(array) // [0 1 2 3 0 9 9 9 9 9]
fmt.Println(len(array)) // 10let value = 9u8;
let start = 5;
let end = 10;
array[start..end].fill(value);
println!("{array:?}"); // [0, 1, 2, 3, 0, 9, 9, 9, 9, 9]
println!("{}", array.len()); // 10let value: UInt8 = 9
let start = 5
let end = 10
for i in start..<end {
array[i] = value
}
print(array) // [0, 1, 2, 3, 0, 9, 9, 9, 9, 9]
print(array.count) // 10byte value = 9;
int start = 5;
int end = 10;
Arrays.fill(array, start, end, value);
IO.println(Arrays.toString(array)); // [0, 1, 2, 3, 0, 9, 9, 9, 9, 9]
IO.println(array.length); // 10Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#uint8-arrays