0

tl;博士;

希望将 a 转换Stream<int>Stream<List<String>>.

长版:

我是 dart/flutter 和这种编程风格的新手,所以请原谅我的菜鸟问题。

我正在通过蓝牙发送一个char/uint8_t包含 ASCII 字符串的流。这是在Stream<int>颤振应用程序中以 a 的形式接收的。我希望将此字节流拆分为字符串行。

我认为解决这个问题的方法是将每个 int 转换为一个字符(由 dart 中的字符串表示),然后对流进行某种拆分操作。我找不到在流上进行拆分的好例子,有人可以帮忙吗?

谢谢。

4

1 回答 1

1

您可以转换Streamusingtransformmap。这是一个示例,我使用两个转换器从我的 中获取一行文本Stream

import 'dart:async';
import 'dart:convert';

Future<void> main() async {
  final myStream = Stream.fromIterable(
      [072, 101, 108, 108, 111, 032, 087, 111, 114, 108, 100]);

  print(await myStream
      .map((asciiValue) => String.fromCharCode(asciiValue))
      .transform(const LineSplitter())
      .first);
  // Hello World
}

需要注意的是,这段代码确实没有那么高效。通常,您会收到多个List<int>事件,其中包含缓冲的数据量并转换更大的块。但是,既然你有一个,Stream<int>这是最简单的方法,我们将每个事件转换为一个字母。

或者,我们可以创建自己的缓冲解决方案。但这实际上取决于您如何获取数据。

于 2021-04-28T16:30:04.317 回答