在<int><String>飞镖中将流转换为流<列表>



tl;dr

希望将Stream<int>转换为Stream<List<String>>

长版本:

我对飞镖/飞镖和这种编程风格很陌生,所以请原谅我的noob问题。

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

我认为这样做的方法是将每个int转换为一个字符(用dart中的字符串表示(,然后对流进行某种拆分操作。我找不到在溪流上进行拆分的好例子,有人能帮忙吗?

谢谢。

您可以使用transformmap转换Stream。下面是一个例子,我使用两个转换器从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>,这是最简单的方法,我们将每个事件转换为一个字母。

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

最新更新