jamiechoo

 

Flutter操作Uint8List字节数组的方法

1. 创建 Uint8List

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List(5); // 创建一个长度为5的Uint8List数组
  print(byteArray); // 输出 [0, 0, 0, 0, 0]
}

2. 添加一个或多个元素

Uint8List 本身不支持直接添加元素,可以使用 List 来扩展 Uint8List 或者使用 Uint8List.sublist 来扩展它。

import 'dart:typed_data';
 
void main() {
Uint8List byteArray = Uint8List.fromList([1, 2, 3]);
// 添加一个元素 Uint8List
  newArray = Uint8List(byteArray.length + 1);
  newArray.setAll(0, byteArray);
  newArray[byteArray.length] = 4;
  print(newArray); // 输出 [1, 2, 3, 4]
// 添加多个元素
  Uint8List extendedArray = Uint8List(byteArray.length + 2);
  extendedArray.setAll(0, byteArray);
  extendedArray[byteArray.length] = 4;
  extendedArray[byteArray.length + 1] = 5;
  print(extendedArray);
// 输出 [1, 2, 3, 4, 5]
}

3. 删除一个或多个元素

要删除元素,可以通过创建一个新的 Uint8List 并跳过想要删除的元素来实现。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 4, 5]);
// 删除一个元素(删除索引为2的元素)
  Uint8List reducedArray = Uint8List(byteArray.length - 1);
  reducedArray.setAll(0, byteArray.sublist(0, 2));
  reducedArray.setAll(2, byteArray.sublist(3));
  print(reducedArray); // 输出 [1, 2, 4, 5]
// 删除多个元素(删除索引为1和2的元素)
  Uint8List furtherReducedArray = Uint8List(byteArray.length - 2);
  furtherReducedArray.setAll(0, byteArray.sublist(0, 1));
  furtherReducedArray.setAll(1, byteArray.sublist(3));
  print(furtherReducedArray); // 输出 [1, 4, 5]
}

4. 插入一个或多个元素

插入元素时需要创建一个新的数组,并将插入位置前后的元素分别复制到新的数组中。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 5]);
// 插入一个元素(在索引为3的位置插入4)
  Uint8List insertOne = Uint8List(byteArray.length + 1);
  insertOne.setAll(0, byteArray.sublist(0, 3));
  insertOne[3] = 4;
  nsertOne.setAll(4, byteArray.sublist(3));
  print(insertOne); // 输出 [1, 2, 3, 4, 5]
// 插入多个元素(在索引为2的位置插入多个元素)
  Uint8List insertMultiple = Uint8List(byteArray.length + 2);
  insertMultiple.setAll(0, byteArray.sublist(0, 2));
  insertMultiple[2] = 6; insertMultiple[3] = 7;
  insertMultiple.setAll(4, byteArray.sublist(2));
  print(insertMultiple); // 输出 [1, 2, 6, 7, 3, 5]
}

5. 截取一个或多个元素

sublist 方法可以用来截取一个子数组。它支持从指定索引到结束的截取,也可以指定起始和结束位置。

import 'dart:typed_data';
 
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 4, 5]);
// 截取从索引1到结束的子数组
  Uint8List sublistFromIndex1 = byteArray.sublist(1);
  print(sublistFromIndex1); // 输出 [2, 3, 4, 5]
// 截取从索引0到索引2的子数组(不包括索引2)
  Uint8List sublistFirstThree = byteArray.sublist(0, 2);
  print(sublistFirstThree); // 输出 [1, 2]
// 截取中间的3个元素
  Uint8List sublistMiddle = byteArray.sublist(1, 4); // 截取索引1到3 print(sublistMiddle);
// 输出 [2, 3, 4]
}

6. 截取前5个或后5个元素

通过 sublist 方法来实现截取前5个或后5个元素。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
// 截取前5个元素
  Uint8List firstFive = byteArray.sublist(0, 5);
  print(firstFive); // 输出 [1, 2, 3, 4, 5]
// 截取后5个元素
  Uint8List lastFive = byteArray.sublist(byteArray.length - 5);
  print(lastFive); // 输出 [6, 7, 8, 9, 10]
}

7. 转换 Uint8ListList<int>

Uint8List 可以通过 .toList() 方法转换为普通的 List<int> 类型。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 4, 5]);
// 转换为List<int>
  List<int> list = byteArray.toList();
  print(list); // 输出 [1, 2, 3, 4, 5]
}

8. 合并两个 Uint8List

可以使用 Uint8List.sublistUint8List 的构造方法来合并两个字节数组。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray1 = Uint8List.fromList([1, 2, 3]);
  Uint8List byteArray2 = Uint8List.fromList([4, 5, 6]);
// 合并两个
  Uint8List Uint8List merged = Uint8List(byteArray1.length + byteArray2.length);
  merged.setAll(0, byteArray1);
  merged.setAll(byteArray1.length, byteArray2);
  print(merged); // 输出 [1, 2, 3, 4, 5, 6]
}

9. 查找元素

你可以使用 indexOf 方法来查找某个字节在 Uint8List 中的索引。

import 'dart:typed_data';
 
void main() {
  Uint8List byteArray = Uint8List.fromList([1, 2, 3, 4, 5]);
// 查找元素
  int index = byteArray.indexOf(3);
  rint(index); // 输出 2
}

posted on 2025-01-10 20:09  jamiechoo  阅读(701)  评论(0)    收藏  举报

导航