带你读《深入浅出Dart》十七、Dart的Stream(2)https://developer.aliyun.com/article/1348630?groupCode=tech_library
文件操作
当你需要读取一个大文件时,可以使用 Stream 来逐行处理文件内容,这样你可以在不需要将整个文件加载到内存的情况下开始处理数据:
import 'dart:convert';import 'dart:io'; void main() { File file = new File('path_to_your_file'); Stream> inputStream = file.openRead(); inputStream .transform(utf8.decoder) // Decode bytes to UTF-8. .transform(new LineSplitter()) // Convert stream to individual lines. .listen((String line) { // Process results. print('line:line: {line.length} bytes'); }, onDone: () { print('File is now closed.'); }, onError: (e) { print(e.toString()); });}
定时任务
你可以使用 Stream 创建一个定时任务,然后在每个时间间隔中执行一些操作。例如,下面的代码使用 Stream.periodic 创建了一个每秒执行一次的定时任务:
void main() { // 创建一个每秒触发一次的 Stream Stream.periodic(Duration(seconds: 1), (count) => count).listen((count) { print('Tick: $count'); });}
5. 数据流处理
在处理大量数据流时,你可以使用 Stream 创建一个数据管道,并利用其提供的 map、filter、reduce 等操作进行数据处理。以下示例将 Stream 中的数字逐个乘以 2:
void main() { Stream.fromIterable([1, 2, 3, 4, 5]) .map((value) => value * 2) .listen((value) { print(value); // 输出 2, 4, 6, 8, 10 });}
这些示例展示了如何在不同的场景中使用 Stream。一旦你熟悉了 Stream 的工作方式,你会发现它是一个非常强大的工具,能够让你更方便地处理异步事件。