【问题标题】:Converting a Stream<int> to Stream<List<String>> in dart在 dart 中将 Stream<int> 转换为 Stream<List<String>>
【发布时间】:2021-07-22 00:42:53
【问题描述】:

tl;dr;

希望将Stream&lt;int&gt; 转换为Stream&lt;List&lt;String&gt;&gt;

加长版:

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

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

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

谢谢。

【问题讨论】:

    标签: dart dart-stream


    【解决方案1】:

    您可以使用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&lt;int&gt; 事件,其中包含缓冲的数据量并转换更大的块。但是,由于您有一个 Stream&lt;int&gt;,因此我们将每个事件都转换为一个字母,这是最简单的方法。

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

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2023-03-31
      • 2021-02-11
      • 2018-08-25
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多